@994495jj
2017-05-31T11:46:46.000000Z
字数 6251
阅读 981
(ACM)数学----概率论 (ACM)数据结构----线段树 (ACM)动态规划----数位dp
#include <algorithm>#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <string>#include <cmath>#include <queue>#include <set>#include <map>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define mp make_pair#define pb push_back#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define de(x) cout << #x << "=" << x << endldouble A[55];double p[25];double s[25];int a[30],cnt[25];double kpow(double a,ll k) {double ans=1;while(k) {if(k&1) ans=ans*a;a=a*a;k>>=1;}return ans;}int main() {///initA[0]=1;for(int i=1;i<55;++i) A[i]=A[i-1]*i;int T;scanf("%d",&T);while(T--) {///int n,k,r;scanf("%d%d%d",&n,&k,&r);///initmemset(cnt,0,sizeof(cnt));///readfor(int i=1;i<=n;++i) scanf("%lf",p+i),s[i]=s[i-1]+p[i];for(int i=1;i<=r;++i) scanf("%d",a+i);///sort asort(a+1,a+1+r);///solvedouble ans=A[k];for(int i=1;i<=r;++i) {if(a[i]!=a[1]) {ans=ans*p[a[i]];}++cnt[a[i]];}for(int i=1;i<=n;++i) {if(i!=a[1]&&cnt[i]) ans=ans/A[cnt[i]];}double res=0;int to=k-(r-cnt[a[1]]);for(int i=cnt[a[1]];i<=to;++i) {double t=ans;t=t*kpow(s[a[1]-1],to-i);t=t*kpow(p[a[1]],i);t=t/A[to-i];t=t/A[i];res=res+t;}printf("%.6lf\n",res);}return 0;}
#include <algorithm>#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <string>#include <cmath>#include <queue>#include <set>#include <map>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define mp make_pair#define pb push_back#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define de(x) cout << #x << "=" << x << endlconst int N=1000005;char s[14];bool rev[4][N<<2];int a[N],sum[4][N<<2],lazy[4][N<<2];void build(int l,int r,int rt) {for(int i=0;i<4;++i) lazy[i][rt]=-1,rev[i][rt]=0;if(l==r) {for(int i=0;i<4;++i) {sum[i][rt]=(a[l]&1);a[l]>>=1;}return ;}int m=(l+r)>>1;build(lson);build(rson);for(int i=0;i<4;++i) sum[i][rt]=sum[i][rt<<1]+sum[i][rt<<1|1];}void DOWN(int i,int rt,int l,int r) {int m=(l+r)>>1;if(lazy[i][rt]!=-1) {int c=lazy[i][rt];if(c) {sum[i][rt<<1]=m-l+1;sum[i][rt<<1|1]=r-m;lazy[i][rt<<1]=lazy[i][rt<<1|1]=1;rev[i][rt<<1]=rev[i][rt<<1|1]=0;} else {sum[i][rt<<1]=sum[i][rt<<1|1]=0;lazy[i][rt<<1]=lazy[i][rt<<1|1]=0;rev[i][rt<<1]=rev[i][rt<<1|1]=0;}lazy[i][rt]=-1;}if(rev[i][rt]) {sum[i][rt<<1]=m-l+1-sum[i][rt<<1];sum[i][rt<<1|1]=r-m-sum[i][rt<<1|1];rev[i][rt<<1]^=1;rev[i][rt<<1|1]^=1;rev[i][rt]=0;}}void upd(int i,int L,int R,int c,int l,int r,int rt) {if(R<l||r<L) return ;if(L<=l&&r<=R) {if(c==0) {sum[i][rt]=0;lazy[i][rt]=0;rev[i][rt]=0;} else if(c==1) {sum[i][rt]=r-l+1;lazy[i][rt]=1;rev[i][rt]=0;} else {sum[i][rt]=r-l+1-sum[i][rt];rev[i][rt]^=1;}return ;}DOWN(i,rt,l,r);int m=(l+r)>>1;upd(i,L,R,c,lson);upd(i,L,R,c,rson);sum[i][rt]=sum[i][rt<<1]+sum[i][rt<<1|1];}int qry(int L,int R,int l,int r,int rt) {if(R<l||r<L) return 0;if(L<=l&&r<=R) {int ans=0;for(int i=3;i>=0;--i) {ans=ans*2+sum[i][rt];}return ans;}int m=(l+r)>>1;for(int i=0;i<4;++i) DOWN(i,rt,l,r);return qry(L,R,lson)+qry(L,R,rson);}int main() {int T;scanf("%d",&T);while(T--) {///int n,m;scanf("%d%d",&n,&m);///readfor(int i=1;i<=n;++i) scanf("%d",a+i);///buildbuild(1,n,1);///solvefor(int i=1;i<=m;++i) {int c,l,r;scanf("%s",s);if(s[0]=='A') {scanf("%d%d%d",&c,&l,&r);++l;++r;for(int j=0;j<4;++j) {if(c%2==0) upd(j,l,r,0,1,n,1);c>>=1;}} else if(s[0]=='O') {scanf("%d%d%d",&c,&l,&r);++l;++r;for(int j=0;j<4;++j) {if(c&1) upd(j,l,r,1,1,n,1);c>>=1;}} else if(s[0]=='X') {scanf("%d%d%d",&c,&l,&r);++l;++r;for(int j=0;j<4;++j) {if(c&1) upd(j,l,r,2,1,n,1);c>>=1;}} else {scanf("%d%d",&l,&r);++l;++r;printf("%d\n",qry(l,r,1,n,1));}}}return 0;}
#include <algorithm>#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <string>#include <cmath>#include <queue>#include <set>#include <map>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define mp make_pair#define pb push_back#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define de(x) cout << #x << "=" << x << endlconst int N=1005;char a[N];int sta[N],L[N];ll b;ll kpow(ll a,ll k) {ll ans=1;while(k) {if(k&1) ans=ans*a%b;a=a*a%b;k>>=1;}return ans;}//返回值:长度,值pll dfs(int l,int r) {ll ans=0,len=0;for(int i=r;i>=l;) {if(a[i]=='['||a[i]==']') {--i;continue;}if(i>l&&a[i-1]==']') {pll now=dfs(L[i-1],i-1);int cnt=a[i]-'0';while(cnt--) {ans=(ans+now.se%b*kpow(10,len)%b)%b;len=len+now.fi;}i=L[i-1];} else {ans=(ans+(a[i]-'0')%b*kpow(10,len)%b)%b;++len;--i;}}return mp(len,ans);}int main() {int T;scanf("%d",&T);while(T--) {///readscanf("%s",a);cin>>b;///get lint len=strlen(a),p=0;for(int i=0;i<len;++i) {if(a[i]=='[') sta[p++]=i;if(a[i]==']') L[i]=sta[--p];}///solvecout<<dfs(0,len-1).se<<endl;}return 0;}
#include <algorithm>#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <string>#include <cmath>#include <queue>#include <set>#include <map>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define mp make_pair#define pb push_back#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define de(x) cout << #x << "=" << x << endlint dig[15],d[15][15][15];int dp(int po,int pre,int zero,int limit) {if(po==-1) return 1;if(!limit&&zero!=-1&&d[po][pre][zero]!=-1) return d[po][pre][zero];int up=limit?dig[po]:9;int ans=0;for(int i=0;i<=up;++i) {if(zero==-1) {if(i) {ans=ans+dp(po-1,i,po,limit&&i==dig[po]);} else {ans=ans+dp(po-1,i,zero,limit&&i==dig[po]);}} else {if((zero-po)&1) {if(i>=pre) ans=ans+dp(po-1,i,zero,limit&&i==dig[po]);} else {if(i<=pre) ans=ans+dp(po-1,i,zero,limit&&i==dig[po]);}}}if(!limit&&zero!=-1) d[po][pre][zero]=ans;return ans;}int solve(int x) {int po=0;while(x) {dig[po++]=x%10;x/=10;}return dp(po-1,0,-1,1);}int main() {int T;scanf("%d",&T);memset(d,-1,sizeof(d));while(T--) {int l,r;scanf("%d%d",&l,&r);;printf("%d\n",solve(r)-solve(l-1));}return 0;}