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\n",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\n",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\n" LL "\n",flags,ans);
83         else
84             printf("%d\n%d\n",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\n",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\n");
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\n");
79             return 0;
80         }
81         spfa(e);
82         if(dis[s]==INF)
83         {
84             printf("-1\n");
85             return 0;
86         }
87         else
88         {
89             printf("%d\n",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\n",nn);
59     for(int i=1;i<=nn;i++)
60         printf("%d\n",b[i]);
61 }

D2T3

时间: 2024-10-06 22:52:11

noip2014总结的相关文章

[NOIP2014普及组]比例简化

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2016 vijos:https://vijos.org/p/1912 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1810 题目来源:NOIP2014普及组第二题 问题分析:题目描述很长,归纳起来,大意就是: 在区间[1,L]内求出2个数A’.B’,这两个数满足: 一.gcd(A’,B’)=1,即A’和

NOIP2014 行记

不知道OI是啥或者信息学竞赛是啥的可以按`Ctrl+W`. <del>很早开始写的..准备出分之后再发布.</del> 谨以此文纪念我信息学竞赛的第一次正式考试. 背景音乐底部有开关. 考前一些天写的: 11.5 下午想转发一下去年的RP++的说说.发现去年没有发(或被删?).. 真想认识一下heoi群里其他学校那些人. 晚上回忆了回忆去年noip的作死种种.发现新高一的比我们去年厉害多了. 11.7 上午吃完早饭发现过了上学的点了,于是就又没去. 下午去河北师大试机. 去的很早,

【DFS】【图论】NOIP2014寻找道路

[NOIP2014]寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的点都直接或间接与终点连通. 2.在满足条件1的情况下使路径最短. 注意:图G中可能存在重边和自环,题目保证终点没有出边. 请你输出符合条件的路径的长度. 输入描述 Input Description 第一行有两个用一个空格隔开的整数n和m,表示图有n个点和m条边. 接下来的m行每行2个整数x.

[NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值 1 .东西向街道从北到南依次编号为0,1,2…128 , 南北向街道从西到东依次编号为0,1,2…128 . 东西向街道和南北向街道相交形成路口,规定编号为x 的南北向街道和编号为y 的东西向街道形成的路口的坐标是(x , y ). 在 某 些 路口存在一定数量的公共

NOIP2014提高组总结

-by mps 尽管今年没参加NOIP2014提高组,但是做了一下,还是有感受的,在这里写出我500分的思路(满分以后会更改,毕竟能力有限......) Day 1 T1 生活大爆炸版石头剪子布 [题目大意] 石头剪子布大家都玩过,只不过这题加了“斯波克”和“蜥蜴人”,事实上还是蛮简单的,有基本逻辑推理常识和基本代码处理能力即可AC,放在PJ都是第一题的难度... 一般有三种做法: 文艺青年:写个矩阵来表示得失,注意要判断两次(甲对乙及乙对甲) 普通青年:16个if嵌套 二B青年:25个if无嵌

【资料】noip2014初赛答案

不废话了直接上图 提高 普及 背景 200字... 虽然我知道大家不想看.. 关于组织参加第二十届全国青少年信息学奥林匹克联赛(NOIP2014)福建赛区竞赛的通知 访问次数:231  发表时间:2014-09-11 各县(市)区科协.教育局,省.市属各普通中学.中职学校: 根据省科协.省教育厅<关于举办第二十届全国青少年信息学奥林匹克联赛福建赛区竞赛的通知>精神,经研究,决定组织我市在校学生参加第二十届全国青少年信息学奥林匹克分区联赛(NOIP2014)福建赛区竞赛.现将有关事项通知如下:

noip2014 小结

D1T1 水水的模拟... #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; int a[500]={0},b[500]={0}; int ju(int aa,int bb) { if (aa==0) { if (bb==0) return 0; if (bb==1) return -1; if (bb==2) return 1; if (bb==3) return 1;

NOIP2014初赛分数线及金华上线名单

NOIP2014初赛分数线及金华上线名单 分数线:提高组81.5,普及组93 这分数线还能再高些吗?悲催的浙江. 金华上线普及组名单: 地市 姓名 学校 年级 参赛语种 成绩 金华 成浩鹏 稠州丹溪校区 普及组 pascal 100 金华 宗博特 稠州城南校区 普及组 C++ 100 金华 郑凯祎 金华四中 普及组 Pascal 98.5 金华 朱江宁 金华外国语学校 普及组 Pascal 98.5 金华 张晨阳 稠州城南校区 普及组 C++ 97 金华 郑燃 下骆宅初中 普及组 pascal

CCF关于NOIP2014复赛报名的通知

CCF关于NOIP2014复赛报名的通知 CCF NOIP2014复赛全部实行网上注册.报名.未通过网上报名的选手将不具备参赛和申诉资格. 系统注册须知: NOIP2014复赛注册时间:2014年10月16日-11月2日(具体见流程表) 注册地址详见NOI网站:http://www.noi.cn(或http://rg.noi.cn). 请先仔细阅读<NOIP2014复赛报名流程说明> 注册人员:NOI各省特派员.分赛区负责人.指导教师.各省取得复赛资格的选手 NOI各省特派员:根据CCF分配的

[NOIP2014]子矩阵

1812. [NOIP2014]子矩阵 http://www.cogs.pro/cogs/problem/problem.php?pid=1812 ★★★   输入文件:submatrix.in   输出文件:submatrix.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 最暴力的算法是枚举选择哪些行.列.复杂度为O(C(n,r)*C(m,c)).不过显然不能承受.(C为组合数) 注意到虽然O(C(n,r)*C(m,c))不能承受,但O(C(n,r))或O(C