zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    DevExpress- GridControl数据导出到EXCEL
    DevExpress 如何获取Repository Item的值
    ae 栅格处理异常
    VS界面控件大小调整
    C++/cli中swtich处理命令行接收到的关键字
    Civil 3d设置横断面图样式
    反射学习
    System.Diagnostics.Process启动Civil 3D及AutoCAD
    Lisp小程序,大作用,不该放弃!
    设置曲面样式之流域
  • 原文地址:https://www.cnblogs.com/JackSlowFuck/p/4113203.html
Copyright © 2011-2022 走看看