A:
链接:http://codeforces.com/contest/353/problem/D
我好像一个智障一样……连后边一定晚于前边都没看出来……光注意错误的方向注意了两个小时……结果就是……爆零……人家都$A$了……
1 #include <iostream>CF353D
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\n",ans);
24 }
25 int sb=haha();
26 int main(){;}
B:
链接:http://www.tsinsen.com/A1295
这个东西……太神了太神了……考试时候根本想不出来怎么个前缀和方法……太强了太强了……
1 #include <iostream>A1295
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\n",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>CF348C
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\n",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(){;}