noip2014总结

noip总结

经过七周的停课,我们终于迎来了期盼已久的noip考试。在这一次的noip考试中,我们经历了很多,也收获了很多。当然这一次考试中也有很多值得总结的地方,特写此总结。

这一次考试考得还不错,其实有一部分运气的存在,bird本来应该只有30分的,莫名其妙的拿了60分。但不要在意这些细节。

第一天,第一二题都还是比较水,也很快的做了出来。第三题先写了一个正确的70分暴力,然后第二题的对拍,没拍出错就交了。第一题真心不会写对拍。然后开始写第三题的错误的30分正解。比较naive

第二天,第一题二维前缀和正解,没发现暴力也能过,拍了很久发现datamaker写错了,第二题水水的bfs,没什么好说的。第三题,考的是骗分选手的自我修养,第一次写20hash,→_→,70分在意料之中。

总体来说,530也算是发挥了自己应有的水平。如果bird不写错,当然就更好了。和第一名,省选差了20分啊→_→,还是可以接受的,吧。

后附代码。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int N,Na,Nb;
 6 int xx[10][10];
 7 int a[2010],b[2010];
 8 int ans1,ans2;
 9 int main()
10 {
11     freopen("rps.in","r",stdin);
12     freopen("rps.out","w",stdout);
13     xx[0][0]=0;
14     xx[0][1]=0;
15     xx[0][2]=1;
16     xx[0][3]=1;
17     xx[0][4]=0;
18     xx[1][0]=1;
19     xx[1][1]=0;
20     xx[1][2]=0;
21     xx[1][3]=1;
22     xx[1][4]=0;
23     xx[2][0]=0;
24     xx[2][1]=1;
25     xx[2][2]=0;
26     xx[2][3]=0;
27     xx[2][4]=1;
28     xx[3][0]=0;
29     xx[3][1]=0;
30     xx[3][2]=1;
31     xx[3][3]=0;
32     xx[3][4]=1;
33     xx[4][0]=1;
34     xx[4][1]=1;
35     xx[4][2]=0;
36     xx[4][3]=0;
37     xx[4][4]=0;
38     scanf("%d%d%d",&N,&Na,&Nb);
39     for(int i=0;i<Na;i++)
40         scanf("%d",&a[i]);
41     for(int i=0;i<Nb;i++)
42         scanf("%d",&b[i]);
43     for(int i=0;i<N;i++)
44     {
45         ans1+=xx[a[i%Na]][b[i%Nb]];
46         ans2+=xx[b[i%Nb]][a[i%Na]];
47     }
48     printf("%d %d
",ans1,ans2);
49 }
D1T1
 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 struct JackSlowFuck
 7 {
 8     int from,to,next;
 9 }Fu[1000010];
10 int head[400010];
11 struct node
12 {
13     int w,mx,sum,pfs,ans;
14 }nd[400010];
15 int nn;
16 void addedge(int f,int t)
17 {
18     ++nn;
19     Fu[nn].from=f;
20     Fu[nn].to=t;
21     Fu[nn].next=head[f];
22     head[f]=nn;
23 }
24 priority_queue <int> Q;
25 void dfs(int now,int from)
26 {
27     
28     while(!Q.empty()) Q.pop();
29     for(int k=head[now];k;k=Fu[k].next)
30         if(Fu[k].to!=from)
31             dfs(Fu[k].to,now);
32     while(!Q.empty()) Q.pop();
33     Q.push(0);
34     Q.push(0);
35     Q.push(nd[from].w);
36     nd[now].sum=(nd[now].sum+nd[from].w)%10007;
37     nd[now].pfs=(nd[now].pfs+(nd[from].w*nd[from].w)%10007)%10007;
38     for(int k=head[now];k;k=Fu[k].next)
39         if(Fu[k].to!=from)
40         {
41             Q.push(nd[Fu[k].to].w);    
42             nd[now].sum=(nd[now].sum+nd[Fu[k].to].w)%10007;
43             nd[now].pfs=(nd[now].pfs+(nd[Fu[k].to].w*nd[Fu[k].to].w)%10007)%10007;
44             nd[now].ans=(nd[now].ans+nd[Fu[k].to].ans)%10007;
45         }
46     nd[now].mx=Q.top();
47     Q.pop();
48     nd[now].mx*=Q.top();
49     nd[now].ans=(nd[now].ans+((nd[now].sum*nd[now].sum)%10007-nd[now].pfs%10007+10007)%10007)%10007;
50     while(!Q.empty()) Q.pop();
51 }
52 int N;
53 int f,t;
54 int maxx;
55 int main()
56 {
57     freopen("link.in","r",stdin);
58     freopen("link.out","w",stdout);
59     scanf("%d",&N);
60     for(int i=1;i<N;i++)
61     {
62         scanf("%d%d",&f,&t);
63         addedge(f,t);
64         addedge(t,f);
65     }
66     nd[0].w=0;
67     for(int i=1;i<=N;i++)
68         scanf("%d",&nd[i].w);
69     dfs(1,0);
70     maxx=nd[1].mx;
71     for(int i=1;i<=N;i++)
72         maxx=max(maxx,nd[i].mx);
73     printf("%d %d
",maxx,nd[1].ans);
74 }
D1T2
 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 long long dp[2][20010];
 7 int mx=0;
 8 int N,M,K;
 9 struct JackSlowFuck
10 {
11     int X,Y;
12 }nd[200010];
13 struct line
14 {
15     int P,L,H;
16 }ln[200010];
17 bool cmp(line a,line b)
18 {
19     return a.P<b.P;
20 }
21 long long ans;
22 int L,H;
23 int l,r;
24 int nn,k;
25 #ifdef WIN32
26 #define LL "%I64d"
27 #else
28 #define LL "%lld"
29 #endif
30 int main()
31 {
32     freopen("bird.in","r",stdin);
33     freopen("bird.out","w",stdout);
34     memset(dp,-1,sizeof(dp));
35     scanf("%d%d%d",&N,&M,&K);
36     for(int i=1;i<=M;i++)
37         dp[0][i]=0;
38     for(int i=0;i<N;i++)
39         scanf("%d%d",&nd[i].X,&nd[i].Y);
40     for(int i=0;i<K;i++)
41         scanf("%d%d%d",&ln[i].P,&ln[i].L,&ln[i].H);
42     sort(ln,ln+K,cmp);
43     for(int i=0;i<N;i++)
44     {    
45         L=0,H=M;
46         l=1,r=M;
47         while(nn<K&&ln[nn].P<i+1) nn++;
48         if(ln[nn].P==i+1) L=ln[nn].L,H=ln[nn].H;
49         if(nn>0&&ln[nn-1].P==i) l=ln[nn-1].L+1,r=ln[nn-1].H-1;
50         for(int j=l;j<=r;j++)
51             if(~dp[i&1][j])
52             {
53                 mx=max(mx,nn);
54                 k=1;
55                 if(j-nd[i].Y>L)
56                     if(dp[(i+1)&1][j-nd[i].Y]==-1||dp[(i+1)&1][j-nd[i].Y]>dp[i&1][j])
57                         dp[(i+1)&1][j-nd[i].Y]=dp[i&1][j];
58                 while(k*nd[i].X+j<L) k++;
59                 while(k*nd[i].X+j<H)
60                 {
61                     if(dp[(i+1)&1][k*nd[i].X+j]==-1||dp[(i+1)&1][k*nd[i].X+j]>dp[i&1][j]+k)
62                         dp[(i+1)&1][k*nd[i].X+j]=dp[i&1][j]+k;
63                     else
64                         break;
65                     k++;
66                 }
67 
68                 if(k*nd[i].X+j>=M&&ln[nn].P!=i+1&&(dp[(i+1)&1][M]==-1||dp[(i+1)&1][M]>dp[i&1][j]+k))
69                     dp[(i+1)&1][M]=dp[i&1][j]+k;
70                 dp[i&1][j]=-1;
71             }
72     }
73     int flags=0;
74         ans=1000000000000000000LL;
75         for(int i=1;i<=M;i++)
76             if(~dp[N&1][i])
77             {
78                 flags=1;
79                 ans=min(ans,dp[N&1][i]);
80             }
81         if(flags)
82             printf("%d
" LL "
",flags,ans);
83         else
84             printf("%d
%d
",flags,mx);
85 }
D1T3
 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int dp[1010][1010];
 6 int a[1010][1010];
 7 int d,N;
 8 int x,y,k;
 9 int ans,mx;
10 int main()
11 {
12     freopen("wireless.in","r",stdin);
13     freopen("wireless.out","w",stdout);
14     memset(a,0,sizeof(a));
15     memset(dp,0,sizeof(dp));
16     scanf("%d%d",&d,&N);
17     for(int i=1;i<=N;i++)
18     {
19         scanf("%d%d%d",&x,&y,&k);
20         a[x+1][y+1]+=k;
21     }
22     for(int i=1;i<=129;i++)
23         for(int j=1;j<=129;j++)
24             dp[i][j]=a[i][j]+dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
25     ans=0;
26     mx=0;
27     for(int i=1;i<=129;i++)
28         for(int j=1;j<=129;j++)
29         {
30             if(dp[min(i+d,129)][min(j+d,129)]-dp[max(i-d-1,0)][min(j+d,129)]-dp[min(i+d,129)][max(j-d-1,0)]+dp[max(i-d-1,0)][max(j-d-1,0)]>mx)
31                 mx=dp[min(i+d,129)][min(j+d,129)]-dp[max(i-d-1,0)][min(j+d,129)]-dp[min(i+d,129)][max(j-d-1,0)]+dp[max(i-d-1,0)][max(j-d-1,0)];
32 
33         }
34     
35     for(int i=1;i<=129;i++)
36         for(int j=1;j<=129;j++)
37         {
38             if(dp[min(i+d,129)][min(j+d,129)]-dp[max(i-d-1,0)][min(j+d,129)]-dp[min(i+d,129)][max(j-d-1,0)]+dp[max(i-d-1,0)][max(j-d-1,0)]==mx)
39                 ans++;
40         }
41     printf("%d %d
",ans,mx);
42 }
D2T1
 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 int N,M;
 8 const int INF=0x3f3f3f3f;
 9 struct JackSlowFuck
10 {
11     int from,to,len,next;
12 }Fu[1000010];
13 int head[100010],nn;
14 int dis[100010];
15 bool in[100010];
16 queue <int> Q;
17 void spfa(int s)
18 {
19     while(!Q.empty()) Q.pop();
20     memset(dis,0x3f,sizeof(dis));
21     dis[s]=0;
22     Q.push(s);
23     in[s]=true;
24     while(!Q.empty())
25     {
26         int now=Q.front();
27         in[now]=false;
28         Q.pop();
29         for(int k=head[now];k;k=Fu[k].next)
30             if(dis[Fu[k].to]>dis[now]+Fu[k].len)
31             {
32                 dis[Fu[k].to]=dis[now]+Fu[k].len;
33                 if(!in[Fu[k].to])
34                     Q.push(Fu[k].to),in[Fu[k].to]=true;
35             }
36     }
37 }
38 void addedge(int f,int t)
39 {
40     ++nn;
41     Fu[nn].next=head[f];
42     head[f]=nn;
43     Fu[nn].len=1;
44     Fu[nn].from=f;
45     Fu[nn].to=t;
46 }
47 int t,f;
48 int s,e;
49 int main()
50 {
51     freopen("road.in","r",stdin);
52     freopen("road.out","w",stdout);
53     scanf("%d%d",&N,&M);
54     for(int i=1;i<=M;i++)
55     {
56         scanf("%d%d",&t,&f);
57         addedge(f,t);
58     }
59     scanf("%d%d",&s,&e);
60     memset(in,0,sizeof(in));
61     spfa(e);
62     if(dis[s]==INF)
63     {
64         printf("-1
");
65         return 0;
66     }
67     else
68     {
69         memset(in,0,sizeof(in));
70         for(int i=1;i<=N;i++)
71             if(dis[i]==INF)
72             {
73                 for(int k=head[i];k;k=Fu[k].next)
74                     in[Fu[k].to]=true;
75             }
76         if(in[s])
77         {
78             printf("-1
");
79             return 0;
80         }
81         spfa(e);
82         if(dis[s]==INF)
83         {
84             printf("-1
");
85             return 0;
86         }
87         else
88         {
89             printf("%d
",dis[s]);
90         }
91 
92     }
93 }
D2T2
 
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int MOD[21]={1000000011,1000000009,1000000008,1000000007,1000000003,1000000001,1000000013,1000000017,1000000019,1000000117,1000000119,2000000011,2000000009,2000000008,2000000007,2000000003,2000000001,2000000013,2000000017,2000000019,2000000117};
 6 long long N,M;
 7 long long a[21][110];
 8 char x[20010];
 9 int len;
10 bool flags;
11 long long now=0;
12 long long ans=0;
13 int b[1500010],nn;
14 int main()
15 {
16     freopen("equation.in","r",stdin);
17     freopen("equation.out","w",stdout);
18     cin>>N>>M;
19     for(int i=0;i<=N;i++)
20     {
21         scanf("%s",x+1);
22         len=strlen(x+1);
23         flags=false;
24         if(x[1]=='-')
25             flags=true;
26         for(int j=1+flags;j<=len;j++)
27         {
28             for(int t=0;t<=20;t++)
29                 a[t][i]=(a[t][i]*10)%MOD[t]+x[j]-'0';
30         }
31         if(flags)
32         {
33             for(int t=0;t<=20;t++)
34                 a[t][i]=-a[t][i];
35         }
36     }
37     for(int i=1;i<=M;i++)
38     {
39         for(int t=0;t<=20;t++)
40         {    
41             flags=false;
42             now=1;
43             ans=a[t][0];
44             for(int j=1;j<=N;j++)
45             {
46                 now=(now*i)%MOD[t];
47                 ans=(ans+(a[t][j]*now)%MOD[t])%MOD[t];
48             }
49             if(ans)
50             {
51                 flags=true;
52                 break;
53             }
54         }
55         if(!flags)
56             b[++nn]=i;
57     }
58     printf("%d
",nn);
59     for(int i=1;i<=nn;i++)
60         printf("%d
",b[i]);
61 }
D2T3
原文地址:https://www.cnblogs.com/JackSlowFuck/p/4113203.html