A:
链接:http://codeforces.com/contest/353/problem/D
我好像一个智障一样……连后边一定晚于前边都没看出来……光注意错误的方向注意了两个小时……结果就是……爆零……人家都$A$了……
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 const int maxn=(int)1e6+5; 7 char s[maxn];int f[maxn],cnt,las,fir,num,x[maxn],y[maxn],ans; 8 int haha() 9 { 10 //freopen("line.in","r",stdin); 11 //freopen("line.out","w",stdout); 12 scanf("%s",s+1);int n=strlen(s+1); 13 for(int i=1;i<=n;i++) 14 if(s[i]=='M'){las=i;break;} 15 if(!las){puts("0");return 0;} 16 for(int i=las+1;i<=n;i++) 17 if(s[i]=='F')x[++num]=i,y[num]=las+num-1; 18 for(int i=1;i<=num;i++) 19 { 20 if(x[i]-y[i]>f[i-1])f[i]=x[i]-y[i]; 21 else f[i]=f[i-1]+1;ans=max(ans,f[i]); 22 } 23 printf("%d ",ans); 24 } 25 int sb=haha(); 26 int main(){;}
B:
链接:http://www.tsinsen.com/A1295
这个东西……太神了太神了……考试时候根本想不出来怎么个前缀和方法……太强了太强了……
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 const int maxn=1005,maxm=15; 7 double p[maxn][maxm],f[maxn][maxn][maxm],g[maxn][maxn][maxm];int n,m; 8 int haha() 9 { 10 scanf("%d%d",&n,&m); 11 for(int i=1;i<=n;i++) 12 for(int j=1;j<=m;j++)scanf("%lf",&p[i][j]); 13 for(int k=1;k<=m;k++) 14 for(int i=1;i<=n;i++) 15 { 16 g[i][i][k]=p[i][k]; 17 for(int j=i+1;j<=n;j++)g[i][j][k]=g[i][j-1][k]*p[j][k]; 18 } 19 for(int i=1;i<=n;i++)f[0][i][0]=1.0; 20 for(int i=1;i<=n;i++) 21 for(int j=1;j<=n;j++) 22 for(int k=0;k<=m;k++) 23 { 24 for(int l=0;l<=m;l++) 25 if(l!=k)f[i][j][k]+=f[i-1][j][l]*g[i][i][k]-(i-j-1>=0?f[i-j-1][j][l]*g[i-j][i][k]:0); 26 f[i][j][k]+=f[i-1][j][k]*g[i][i][k]; 27 } 28 double ans=0; 29 for(int i=1;i<=n;i++) 30 for(int j=1;j<=m;j++)ans+=(f[n][i][j]-f[n][i-1][j])*i; 31 printf("%0.6lf ",ans); 32 } 33 int sb=haha(); 34 int main(){;}
C:
链接:http://codeforces.com/problemset/problem/348/C
数据太水了……绝望的暴力拿了$95$分……剩下一个点还是莫名其妙$WA$了……正解的那个按集合大小分类啊,$excited$!
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=100005,maxk=350; 4 long long add[maxk],sum[maxk],tot[maxn];int id[maxn],cnt[maxn][maxk],c[maxn],n,m,q,k; 5 bool h[maxn]; 6 vector<int>g[maxn],t[maxn]; 7 int haha() 8 { 9 while(scanf("%d%d%d",&n,&m,&q)!=EOF) 10 { 11 for(int i=1;i<=n;i++)scanf("%I64d",&tot[i]);k=0; 12 for(int i=1;i<=m;i++) 13 { 14 scanf("%d",&c[i]); 15 if(c[i]>=maxk)h[i]=1,id[i]=++k; 16 else h[i]=0; 17 for(int j=1;j<=c[i];j++) 18 { 19 int x;scanf("%d",&x);g[i].push_back(x); 20 if(h[i])t[x].push_back(k),sum[k]+=tot[x]; 21 } 22 } 23 for(int i=1;i<=m;i++) 24 for(int j=0;j<g[i].size();j++) 25 { 26 int x=g[i][j]; 27 for(int kk=0;kk<t[x].size();kk++) 28 { 29 int v=t[x][kk]; 30 cnt[i][v]++; 31 } 32 } 33 while(q--) 34 { 35 char opt[4];int p;long long x;scanf("%s%d",opt,&p); 36 if(opt[0]=='?') 37 { 38 long long ans=0; 39 if(h[p]) 40 { 41 ans+=sum[id[p]]; 42 for(int i=1;i<=k;i++)ans+=cnt[p][i]*add[i]; 43 } 44 else 45 { 46 for(int i=0;i<g[p].size();i++)ans+=tot[g[p][i]]; 47 for(int i=1;i<=k;i++)ans+=cnt[p][i]*add[i]; 48 } 49 printf("%I64d ",ans); 50 } 51 else 52 { 53 scanf("%I64d",&x); 54 if(h[p])add[id[p]]+=x; 55 else 56 { 57 for(int i=0;i<g[p].size();i++)tot[g[p][i]]+=x; 58 for(int i=1;i<=k;i++)sum[i]+=cnt[p][i]*x; 59 } 60 } 61 } 62 } 63 } 64 int sb=haha(); 65 int main(){;}