写在前面

  这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛。

  鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网翻墙下海找了不少水(fei)题,经过他们优(le)美(se)的文字加工后,有故事有题目有人物有奸情的模拟赛正式呈上。

我是正文

题目名

GRYZ娱乐时刻

GRYZ追击时刻

GRYZ就餐时刻

源文件

hyxzc.cpp/c/pas

clikar.cpp/c/pas

eat.cpp/c/pas

输入文件

hyxzc.in

clikar.in

eat.in

输出文件

hyxzc.out

clikar.out

eat.out

时间限制

1000MS

1000MS

1000MS

内存限制

256MB

256MB

24MB

测试点

20

10

10

测试点分值

5

10

10

测试时间

 2016221 8:00 – 11:30

  

说明:

1.考试时间为 3 小时 30 分钟

2.评测在Windows下进行

3.评测时不打开任何优化开关

4.请大家认真审题,不要出现不必要的失误

5.题目均非原创,毕竟你们师哥师姐也很弱QAQ

6.本次题目较水,所以最后有一道附加题,以免大家AK之后无聊,附加题自然是不算分,当然你们要是都AK了我就只好测一下了

                                  GRYZ娱乐时刻

【题目描述】

无聊的hyxzc不想写代码了,于是他开始玩游戏——洛克王国。众所周知,洛克王国是一个非常好玩的游戏(至少在hyxzc眼中是这样的)。这天,hyxzc登上他的洛克王国账号,开始了新的一天的颓废之旅。

hyxzc是一个高傲的人,他想把自己的宠物都升到100级(没办法,强迫症),今天是洛克王国4周年纪念日,所以奖励非常多,正当小洛克们欢快的庆祝周年的时候,坏坏的恩佐又出来捣乱了,(众所周知,恩佐是一个超级大坏蛋,总想一些办法去损害洛克王国,而守护洛克王国是每位小洛克的责任)。这次,恩佐无意在黑魔法中返现了召唤远古恶龙的方法。并且召唤了n条恶龙,而你的任务则是消灭这n条恶龙, 本次任务奖励有大量经验,能够让宠物更快的升级,所以hyxzc便心动了。

hyxzc一共有m个宠物可以召唤,而每个宠物的等级各不相同,等级为x的宠物只能干掉小于等于x的恶龙,且每只宠物只能干掉一只恶龙,因为宠物还要去找自己的小伙伴去玩耍呢,并且你需要花费x个洛克贝为宠物恢复活力。hyxzc可不是一个大方的家伙,他希望花最少的洛克贝来完成这个任务。而洛克王国的防沉迷告诉hyxzc,他只有1秒钟的时间去思考如何召唤宠物,于是hyxzc便向你求助,你只需要输出他的最少花费即可,若无法完全杀掉恶龙,则输出“Loowater is doomed!”。

【输入格式】

输入包含T组数据,每组数据的第一行为正整数n和m;以下n行每行为一个整数,即恶龙的等级,以下m行为一个整数,即每个宠物的等级,输入结束标记为n=m=0;

【输出格式】

对于每组数据,输出最少花费。

【样例输入】

2 3

5

4

7

8

4

2 1

5

5

10

0 0

【样例输出】

11

Loowater is doomed!

【数据范围】

0<T<=10;

对于20%的数据:0<n,m<=20;0<Ni,Mi<=100000;

对于40%的数据:0<n,m<=200;0<Ni,Mi<=100000;

对于60%的数据:0<n,m<=2000;0<Ni,Mi<=100000;

对于100%的数据:0<n,m<=20000;0<Ni,Mi<=100000;

GRYZ追击时刻

XYD过完年后高高兴兴的回到了GRYZ,然后他发现可爱的Robot已经在这里等待了3天,由于Robot跑的很慢,所以她正在准备施展魔法,逮住 XYD。

XYD知道,除了男生宿舍,其他的地方都会被Robot宝宝魔法控制(因为宝宝是一个可爱的女孩子),如果XYD被控制之后,就会发生很可怕的 事情。。。

所以,XYD一定要尽快赶回男生宿舍。

GRYZ可以用一个N*M(N,M<=50)的地图表示,地图上有5种符号:"X S D . *" 。其中“X”处有可怕的兔兔(兔兔可能很多),XYD和Robot都不能经过。

"."表示XYD和魔法都能经过的地方。

“*”表示Robot的位置,“S”表示XYD起始位置,“D”表示男生宿舍。

xyd每秒钟可以向相邻位置移动,Robot的魔法也会向相邻的地方蔓延(从已覆盖的区域,开始只覆盖*点)。众所周知,宝宝魔法就像是一股水流。

求XYD回到男生宿舍的最短时间,如果XYD回不到男生宿舍,就有可能被迫以身相许,那么他就会高兴的大喊一声“I Love xxx!!!”。(这就是很可怕的事情)

【输入格式】

第一行为正整数n和m;以下n行m列为地图。

【输出格式】

如果能成功回到男生宿舍输出最短时间,否则输出“I Love xxx!!!”(不包括双引号)

【样例输入】

3 3

D.*

.S.

【样例输出】

3

【样例输入】

3 3

D.*

..S

【样例输出】

I Love xxx !!!

GRYZ就餐时刻

【题目描述】

寒假,大家都回家过年去了,只有GRYZ苦逼的竞赛生们还在学校上课。众所周知,有人的地方就需要有饭,但是食堂的大爷们都回家了,我们只能依靠外卖。已知那是一个非常大的外卖店,有专业的盒饭生产设备,为了保证GRYZ的孩子们每顿饭能吃好吃的饭菜,它们总会将a点生产出的盒饭运往加热处加热后再运往b点装车。这些部门非常的高能,它们有时可以生产盒饭,有时又能变身成装车点(不要问我为什么)。

有些部门之间有专门的传送带连接,店长是个非常珍惜时间的人,他希望盒饭从生产出来到运走所花费的时间尽可能的短,但是店长又是一个超级懒人,所以他把计算的工作交给了你

【输入格式】

第一行两个整数n、m,n表示部门数量,m表示传送带数量。出于方便,1号部门是加热处。

接下来m行,每行三个整数u、v、w,表示有一条从u部门到v部门的传送带,传送过去需要w个单位时间。注意传送带是单向的。

接下来一个整数q,表示有q次运送。

接下来q行,每行两个数a、b,表示这一次要将产品从a部门运送到b部门。

【输出格式】

输出q行,每行一个整数,表示这次运送最少需要的时间。若没有传送方案,输出-1。

【样例输入】

5 5

1 2 3

1 3 5

4 1 7

5 4 1

5 3 1

3

4 2

5 3

2 3

【样例输出】

10

13

-1

【数据规模与约定】

30%的数据,n≤100,m≤500,w=1

60%的数据,n≤100,m≤5000

另20%的数据,q=1

100%的数据,2≤n≤3000,m≤100000,2≤a,b≤n,

q≤100000,1≤u,v≤n,1≤w≤10000

有些部门之间可能有多条传送带。

题目是不是太水,下面就是更水的附加题了

【题目描述】

Czy手上有一个长度为n的数列,第i个数为xi。

他现在想知道,对于给定的a,b,c,他要找到一个i,使得a*(i+1)*xi2+(b+1)*i*xi+(c+i)=0成立。

如果有多个i满足,Czy想要最小的那个i。

Czy有很多很多组询问需要你回答,多到他自己也不确定有多少组。所以在输入数据中a=b=c=0标志着Czy的提问的结束。

更加糟糕的是,Czy为了加大难度,决定对数据进行加密以防止离线算法的出现。

假设你在输入文件中读到的三个数为a0,b0,c0,那么Czy真正要询问的a=a0+LastAns,b=b0+LastAns,c=c0+LastAns.

LastAns的值是你对Czy的前一个询问的回答。如果这是第一个询问,那么LastAns=0。

所有的询问都将会按上述方式进行加密,包括标志着询问的结束的那个询问也是这样。

【输入】

输入文件为 seq.in

输入文件第一行包含一个整数n,表示数列的长度。

输入文件第二行包含n个整数,第i个数表示xi的值。

接下来若干行,每行三个数,表示加密后的a,b,c值(也就是上文所述的a0,b0,c0)

【输出】

输出文件为 seq.out

包含若干行,第i行的值是输入文件中第i个询问的答案。注意,你不需要对标志着询问结束的那个询问作答。

同时,标志着询问结束的询问一定是输入文件的最后一行。也就是,输入文件不会有多余的内容。

【输入输出样例】

 

seq.in

seq.out

5

-2 3 1 -5 2

-5 -4 145

-1 -6 -509

-9 -14 40

-3 -13 21

-3 -3 -3

5

4

3

3

【数据范围】

对于40%的数据,满足N<=1000,需要作出回答的询问个数不超过1000.

对于100%的数据,满足N<=50000,需要作出回答的询问个数不超过500000,xi的绝对值不超过30000,解密后的a的绝对值不超过50000,解密后的b的绝对值不超过10^8,解密后的c的绝对值不超过10^18.

PS:遇到猥琐大(姐)叔(姐)出的题怎么办?百醇学长来教你!

  作为一只不世出的大水犇,来的晚AK早的百醇学长为大家奉上新鲜的题目出处和解析。

我是题解,我也有题目

GRYZ娱乐时刻

【题目描述】

无聊的hyxzc不想写代码了,于是他开始玩游戏——洛克王国。众所周知,洛克王国是一个非常好玩的游戏(至少在hyxzc眼中是这样的)。这天,hyxzc登上他的洛克王国账号,开始了新的一天的颓废之旅。

hyxzc是一个高傲的人,他想把自己的宠物都升到100级(没办法,强迫症),今天是洛克王国4周年纪念日,所以奖励非常多,正当小洛克们欢快的庆祝周年的时候,坏坏的恩佐又出来捣乱了,(众所周知,恩佐是一个超级大坏蛋,总想一些办法去损害洛克王国,而守护洛克王国是每位小洛克的责任)。这次,恩佐无意在黑魔法中返现了召唤远古恶龙的方法。并且召唤了n条恶龙,而你的任务则是消灭这n条恶龙, 本次任务奖励有大量经验,能够让宠物更快的升级,所以hyxzc便心动了。

hyxzc一共有m个宠物可以召唤,而每个宠物的等级各不相同,等级为x的宠物只能干掉小于等于x的恶龙,且每只宠物只能干掉一只恶龙,因为宠物还要去找自己的小伙伴去玩耍呢,并且你需要花费x个洛克贝为宠物恢复活力。hyxzc可不是一个大方的家伙,他希望花最少的洛克贝来完成这个任务。而洛克王国的防沉迷告诉hyxzc,他只有1秒钟的时间去思考如何召唤宠物,于是hyxzc便向你求助,你只需要输出他的最少花费即可,若无法完全杀掉恶龙,则输出“Loowater is doomed!”。

【输入格式】

输入包含T组数据,每组数据的第一行为正整数n和m;以下n行每行为一个整数,即恶龙的等级,以下m行为一个整数,即每个宠物的等级,输入结束标记为n=m=0;

【输出格式】

对于每组数据,输出最少花费。

【样例输入】

2 3

5

4

7

8

4

2 1

5

5

10

0 0

【样例输出】

11

Loowater is doomed!

【数据范围】

0<T<=10;

对于20%的数据:0<n,m<=20;0<Ni,Mi<=100000;

对于40%的数据:0<n,m<=200;0<Ni,Mi<=100000;

对于60%的数据:0<n,m<=2000;0<Ni,Mi<=100000;

对于100%的数据:0<n,m<=20000;0<Ni,Mi<=100000;

【出处】

刘汝佳蓝书《算法竞赛入门经典训练指南》第一章第一节第一题(Orz,所以说多看些书是很有好处的)&&UVa 11292

【思路】

排序龙头,排序宠物,对砍

  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. int main(){
  9. freopen("hyxzc.in","r",stdin);
  10. freopen("hyxzc.out","w",stdout);
  11. int n,m;
  12. int a[],b[];
  13. while(scanf("%d%d",&n,&m)==&&n&&m){
  14. memset(a,,sizeof(a));
  15. memset(b,,sizeof(b));
  16. for (int i=;i<n;++i) scanf("%d",&a[i]);sort(a,a+n);
  17. for (int i=;i<m;++i) scanf("%d",&b[i]);sort(b,b+m);
  18. int x=,y=;
  19. for(int i=;i<m;++i)
  20. if (b[i]>=a[x]){
  21. y+=b[i];
  22. if(++x==n) break;
  23. }
  24. if (x<n) printf("Loowater is doomed!\n");
  25. else printf("%d\n",y);
  26. }
  27. fclose(stdin);
  28. fclose(stdout);
  29. return ;
  30. }

GRYZ追击时刻

XYD过完年后高高兴兴的回到了GRYZ,然后他发现可爱的Robot已经在这里等待了3天,由于Robot跑的很慢,所以她正在准备施展魔法,逮住 XYD。

XYD知道,除了男生宿舍,其他的地方都会被Robot宝宝魔法控制(因为宝宝是一个可爱的女孩子),如果XYD被控制之后,就会发生很可怕的 事情。。。

所以,XYD一定要尽快赶回男生宿舍。

GRYZ可以用一个N*M(N,M<=50)的地图表示,地图上有5种符号:"X S D . *" 。其中“X”处有可怕的兔兔(兔兔可能很多),XYD和Robot都不能经过。

"."表示XYD和魔法都能经过的地方。

“*”表示Robot的位置,“S”表示XYD起始位置,“D”表示男生宿舍。

xyd每秒钟可以向相邻位置移动,Robot的魔法也会向相邻的地方蔓延(从已覆盖的区域,开始只覆盖*点)。众所周知,宝宝魔法就像是一股水流。

求XYD回到男生宿舍的最短时间,如果XYD回不到男生宿舍,就有可能被迫以身相许,那么他就会高兴的大喊一声“I Love xxx!!!”。(这就是很可怕的事情)

【输入格式】

第一行为正整数n和m;以下n行m列为地图。

【输出格式】

如果能成功回到男生宿舍输出最短时间,否则输出“I Love xxx!!!”(不包括双引号)

【样例输入】

3 3

D.*

.S.

【样例输出】

3

【样例输入】

3 3

D.*

..S

【样例输出】

I Love xxx !!!

【出处】

敬爱的黄学长http://hzwer.com/3303.html

【思路】

很裸的一道广搜,唯一的不同是在更新人的位置时还要更新水覆盖的位置。用两个队列存人和水的状态,用正常的广搜枚举人的同时,在时间t改变时更新水的位置即可

黄sir的代码:

  1. #include<cstdio>
  2.  
  3. #include<iostream>
  4.  
  5. using namespace std;
  6.  
  7. int n,m;
  8.  
  9. const int mx[]={,,,-};
  10.  
  11. const int my[]={,,-,};
  12.  
  13. struct dat{
  14.  
  15. int x,y,t;
  16.  
  17. }q1[],q2[];
  18.  
  19. int t1,w1,t2,w2;
  20.  
  21. int x1,y1,x2,y2;
  22.  
  23. int st;
  24.  
  25. int map[][];
  26.  
  27. inline int read()
  28.  
  29. {
  30.  
  31. int x=,f=;char ch=getchar();
  32.  
  33. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  34.  
  35. while(ch>=''&&ch<=''){x*=;x+=ch-'';ch=getchar();}
  36.  
  37. return x*f;
  38.  
  39. }
  40.  
  41. inline int mark(int x,int y)
  42.  
  43. {if (x<||y<||x>n||y>m) return ;return ;}
  44.  
  45. void bfs()
  46.  
  47. {
  48.  
  49. while (t2<w2)
  50.  
  51. {
  52.  
  53. int nx=q2[++t2].x,ny=q2[t2].y,nt=q2[t2].t;
  54.  
  55. if (nt!=st)
  56.  
  57. {
  58.  
  59. st=nt;
  60.  
  61. while (t1<w1&&q1[t1+].t==nt-)
  62.  
  63. {
  64.  
  65. t1++;
  66.  
  67. for (int i=;i<;i++)
  68.  
  69. {
  70.  
  71. int cx=q1[t1].x+mx[i],cy=q1[t1].y+my[i];
  72.  
  73. if (mark(cx,cy)&&map[cx][cy]!=&&map[cx][cy]!=&&!(cx==x2&&cy==y2))
  74.  
  75. {
  76.  
  77. q1[++w1].x=cx;
  78.  
  79. q1[w1].y=cy;
  80.  
  81. q1[w1].t=q1[t1].t+;
  82.  
  83. map[cx][cy]=;
  84.  
  85. }
  86.  
  87. }
  88.  
  89. }
  90.  
  91. }
  92.  
  93. if (map[nx][ny]==) continue;
  94.  
  95. if (nx==x2&&ny==y2) {printf("%d",nt);return;}
  96.  
  97. for (int i=;i<;i++)
  98.  
  99. {
  100.  
  101. int wx=nx+mx[i];
  102.  
  103. int wy=ny+my[i];
  104.  
  105. if (mark(wx,wy)&&map[wx][wy]==)
  106.  
  107. {
  108.  
  109. q2[++w2].x=wx;
  110.  
  111. q2[w2].y=wy;
  112.  
  113. q2[w2].t=nt+;
  114.  
  115. map[q2[w2].x][q2[w2].y]=;
  116.  
  117. }
  118.  
  119. }
  120.  
  121. }
  122.  
  123. printf("ORZ hzwer!!!\n");
  124.  
  125. }
  126.  
  127. int main()
  128.  
  129. {
  130.  
  131. freopen("sliker.in","r",stdin);
  132.  
  133. freopen("sliker.out","w",stdout);
  134.  
  135. n=read();m=read();
  136.  
  137. for (int i=;i<=n;i++)
  138.  
  139. for (int j=;j<=m;j++)
  140.  
  141. {
  142.  
  143. char ch;
  144.  
  145. cin>>ch;
  146.  
  147. if (ch=='.') map[i][j]=;
  148.  
  149. if (ch=='X') map[i][j]=;
  150.  
  151. if (ch=='*') {map[i][j]=;q1[++w1].x=i;q1[w1].y=j;}
  152.  
  153. if (ch=='S') {map[i][j]=;q2[++w2].x=x1=i;q2[w2].y=y1=j;}
  154.  
  155. if (ch=='D') {map[i][j]=;x2=i;y2=j;}
  156.  
  157. }
  158.  
  159. bfs();
  160.  
  161. }

                                  GRYZ就餐时刻

【题目描述】

寒假,大家都回家过年去了,只有GRYZ苦逼的竞赛生们还在学校上课。众所周知,有人的地方就需要有饭,但是食堂的大爷们都回家了,我们只能依靠外卖。已知那是一个非常大的外卖店,有专业的盒饭生产设备,为了保证GRYZ的孩子们每顿饭能吃好吃的饭菜,它们总会将a点生产出的盒饭运往加热处加热后再运往b点装车。这些部门非常的高能,它们有时可以生产盒饭,有时又能变身成装车点(不要问我为什么)。

有些部门之间有专门的传送带连接,店长是个非常珍惜时间的人,他希望盒饭从生产出来到运走所花费的时间尽可能的短,但是店长又是一个超级懒人,所以他把计算的工作交给了你

【输入格式】

第一行两个整数n、m,n表示部门数量,m表示传送带数量。出于方便,1号部门是加热处。

接下来m行,每行三个整数u、v、w,表示有一条从u部门到v部门的传送带,传送过去需要w个单位时间。注意传送带是单向的。

接下来一个整数q,表示有q次运送。

接下来q行,每行两个数a、b,表示这一次要将产品从a部门运送到b部门。

【输出格式】

输出q行,每行一个整数,表示这次运送最少需要的时间。若没有传送方案,输出-1。

【样例输入】

5 5

1 2 3

1 3 5

4 1 7

5 4 1

5 3 1

3

4 2

5 3

2 3

【样例输出】

10

13

-1

【数据规模与约定】

30%的数据,n≤100,m≤500,w=1

60%的数据,n≤100,m≤5000

另20%的数据,q=1

100%的数据,2≤n≤3000,m≤100000,2≤a,b≤n,

q≤100000,1≤u,v≤n,1≤w≤10000

有些部门之间可能有多条传送带。

【出处】

山东省2015年NOIP夏令营提高组7.27测试T3

原创人:姜志豪大爷

【思路】

30%的数据,n≤100,m≤500,w=1

BFS求出两两之间的最短路,对每个询问a到b,直接将a到1的最短路和1到b的最短路加起来。

60%的数据,n≤100,m≤5000

将30%的数据中的BFS改成Floyd算法。

(FLOYD大法好,我不会告诉你在诸城的时候我就这一个题拿了60o(╯□╰)o)

另20%的数据,q=1

询问a到b的最短路,先以a为起点做最短路,求出a到1的最短路,再以1为起点做最短路,求出1到b的最短路,加起来就行。

100%的数据,2≤n≤3000,m≤100000,2≤a,b≤n,q≤100000,1≤u,v≤n,1≤w≤10000

以1为起点,做最短路,这样在询问a到b时,1到b的最短路就能得到。

将所有边反向,以1为起点,做最短路,这样在询问a到b时,a到1的最短路就能得到(就是反向后1到a的最短路)。

  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<cstdio>
  7. #include<cmath>
  8. #include<algorithm>
  9. using namespace std;
  10.  
  11. const int INF = ;
  12. const int MAXN = , MAXM = ;
  13. int next1[MAXM], v1[MAXM], w1[MAXM];
  14. int head1[MAXN], tot1 = ;
  15. int next2[MAXM], v2[MAXM], w2[MAXM];
  16. int head2[MAXN], tot2 = ;
  17. int disto1[MAXN], disfrom1[MAXN];
  18. bool vis1[MAXN], vis2[MAXN];
  19. int n, m, u, v, w, q, a, b;
  20.  
  21. void add1(int a, int b, int c) {
  22. v1[++tot1] = b;
  23. w1[tot1] = c;
  24. next1[tot1] = head1[a];
  25. head1[a] = tot1;
  26. }
  27.  
  28. void add2(int a, int b, int c) {
  29. v2[++tot2] = a;
  30. w2[tot2] = c;
  31. next2[tot2] = head2[b];
  32. head2[b] = tot2;
  33. }
  34.  
  35. void spfafrom1(int s) {
  36. queue<int> Q;
  37. for (int i = ; i <= n; i++) disfrom1[i] = INF;
  38. disfrom1[s] = ;
  39. Q.push(s);
  40. vis1[s] = true;
  41. while(!Q.empty()) {
  42. int x = Q.front();
  43. Q.pop();
  44. vis1[x] = false;;
  45. for (int i = head1[x]; i != ; i = next1[i])
  46. if (disfrom1[v1[i]] > disfrom1[x] + w1[i]) {
  47. disfrom1[v1[i]] = disfrom1[x] + w1[i];
  48. if (!vis1[v1[i]]) {
  49. Q.push(v1[i]);
  50. vis1[v1[i]] = true;
  51. }
  52. }
  53. }
  54. }
  55.  
  56. void spfato1(int s) {
  57. queue<int> Q;
  58. for (int i = ; i <= n; i++) disto1[i] = INF;
  59. disto1[s] = ;
  60. Q.push(s);
  61. vis2[s] = true;
  62. while(!Q.empty()) {
  63. int x = Q.front();
  64. Q.pop();
  65. vis2[x] = false;;
  66. for (int i = head2[x]; i != ; i = next2[i])
  67. if (disto1[v2[i]] > disto1[x] + w2[i]) {
  68. disto1[v2[i]] = disto1[x] + w2[i];
  69. if (!vis2[v2[i]]) {
  70. Q.push(v2[i]);
  71. vis2[v2[i]] = true;
  72. }
  73. }
  74. }
  75. }
  76.  
  77. int main() {
  78. freopen("eat.in", "r", stdin);
  79. freopen("eat.out", "w", stdout);
  80. scanf("%d%d", &n, &m);
  81. for(int i = ; i < m; i++) {
  82. scanf("%d%d%d", &u, &v, &w);
  83. add1(u, v, w);
  84. add2(u, v, w);
  85. }
  86. memset(vis1, false, sizeof(vis1));
  87. spfato1();
  88. memset(vis2, false, sizeof(vis2));
  89. spfafrom1();
  90. scanf("%d", &q);
  91. for(int i = ; i < q; i++) {
  92. scanf("%d%d", &a, &b);
  93. if(disto1[a] == INF || disfrom1[b] == INF)
  94. printf("-1\n");
  95. else
  96. printf("%d\n", disto1[a] + disfrom1[b]);
  97. }
  98. return ;
  99. }

附加题

【题目描述】

Czy手上有一个长度为n的数列,第i个数为xi。

他现在想知道,对于给定的a,b,c,他要找到一个i,使得a*(i+1)*xi2+(b+1)*i*xi+(c+i)=0成立。

如果有多个i满足,Czy想要最小的那个i。

Czy有很多很多组询问需要你回答,多到他自己也不确定有多少组。所以在输入数据中a=b=c=0标志着Czy的提问的结束。

更加糟糕的是,Czy为了加大难度,决定对数据进行加密以防止离线算法的出现。

假设你在输入文件中读到的三个数为a0,b0,c0,那么Czy真正要询问的a=a0+LastAns,b=b0+LastAns,c=c0+LastAns.

LastAns的值是你对Czy的前一个询问的回答。如果这是第一个询问,那么LastAns=0。

所有的询问都将会按上述方式进行加密,包括标志着询问的结束的那个询问也是这样。

【输入】

输入文件为 seq.in

输入文件第一行包含一个整数n,表示数列的长度。

输入文件第二行包含n个整数,第i个数表示xi的值。

接下来若干行,每行三个数,表示加密后的a,b,c值(也就是上文所述的a0,b0,c0)

【输出】

输出文件为 seq.out

包含若干行,第i行的值是输入文件中第i个询问的答案。注意,你不需要对标志着询问结束的那个询问作答。

同时,标志着询问结束的询问一定是输入文件的最后一行。也就是,输入文件不会有多余的内容。

【输入输出样例】

 

seq.in

seq.out

5

-2 3 1 -5 2

-5 -4 145

-1 -6 -509

-9 -14 40

-3 -13 21

-3 -3 -3

5

4

3

3

【数据范围】

对于40%的数据,满足N<=1000,需要作出回答的询问个数不超过1000.

对于100%的数据,满足N<=50000,需要作出回答的询问个数不超过500000,xi的绝对值不超过30000,解密后的a的绝对值不超过50000,解密后的b的绝对值不超过10^8,解密后的c的绝对值不超过10^18.

附加题没做o(╯□╰)o

【思路】

数据很大,单凭朴素是没办法的,

开始我想在公式上做手脚,但是未知数有两个一个i和xi,想把i消掉但是是做不到的

最终忍不住看了题解  啊啊啊!!豁然开朗啊!!!

他要加密并不是为了防离线的....就深思他弄个这个干啥....

还有一句话‘所有的询问都将会按上述方式进行加密,包括标志着询问的结束的那个询问也是这样。‘

这都是突破口,根据最后一组是a+lastans=0 那么lastans就是倒数第二组的答案....接着

将这个带如上一组的公式,就是个一元一次方程就又能求出在上一组的答案了...so:推上去就行了.....

还有别忘了开int64;公式可以转化一下在带数

转载说明出处:http://blog.sina.com.cn/s/blog_9dd49f8101014jzv.html

[GRYZ]寒假模拟赛的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  3. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  4. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  5. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  6. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

  7. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  8. BZOJ2741: 【FOTILE模拟赛】L

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1170  Solved: 303[Submit][Status] ...

  9. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

随机推荐

  1. Project Euler 80:Square root digital expansion 平方根数字展开

    Square root digital expansion It is well known that if the square root of a natural number is not an ...

  2. BS架构与CS架构的区别

    C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势. ...

  3. Android:PopupWindow简单弹窗改进版

    Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...

  4. windows系统下Python环境的搭建

    1.下载最新的Python版本3.5.0.

  5. NSPoint

    #import <Foundation/Foundation.h>   int main(int argc, const char * argv[]) {    @autoreleasep ...

  6. python流程控制语句 ifelse - 2

    #! /usr/bin/python x = input('please input a integer:') x = int (x) ): print('你输入了一个负数') else: print ...

  7. Android TextView多行文本滚动实现

    Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局.只要在l ...

  8. 【翻译】Zakas解答Baranovskiy的JavaScript测验题

    原文:http://www.nczonline.net/blog/2010/01/26/answering-baranovskiys-javascript-quiz/ ---------------- ...

  9. 分解成3NF的保持函数依赖的分解算法:

    转换成3NF的保持函数依赖的分解算法: ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U= ...

  10. 对List顺序,逆序,随机排列实例代码

    ackage  Test; import  java.util.Collections; import  java.util.LinkedList; import  java.util.List; p ...