10月7日考试翻车实录

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\n",ans);
24 }
25 int sb=haha();
26 int main(){;}
CF353D

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\n",ans);
32 }
33 int sb=haha();
34 int main(){;}
A1295

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\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(){;}
CF348C

 

posted @ 2017-10-08 06:31  ccc000111  阅读(213)  评论(0编辑  收藏  举报