2016.8.15上午纪中初中部NOIP普及组比赛

链接:https://jzoj.net/junior/#contest/home/1333

这次比赛不怎么好,因为这套题目我并不是很擅长。

可同学们都说很水,于是。。。我在同学的教导之下AK了。

进度:

比赛:100+ 60+ 30+ 10=200

改题:100+100+100+100=AK

一、icow

链接:https://jzoj.net/junior/#contest/show/1333/0

我一看到“权值”二字,就以为会是图论,结果。。。那没有图论这么难。。。

本来理解错题了,后来改一改就对了。

题目简化:

就是输入权值后,把最大的输出,然后平分给其它的,余数送给前面的,清零。

重复t次。

正解:

读入后来个循环i:=1..t,然后用循环找出最大的值。

然后把它清零,按照题目要求分配。。。循环完毕即可。

  1. var
  2. n,t,i,j,x,y,m,mx:longint;
  3. r:array[0..1000]of longint;
  4. {////////////////////reads////////////////////////////////}
  5. procedure reads;
  6. begin
  7. readln(n,t);
  8. for i:=1 to n do readln(r[i]);
  9. end;
  10. {/////////////////////runs&writes///////////////////////////}
  11. procedure runs;
  12. begin
  13. repeat
  14. m:=0;
  15. mx:=0;
  16. for i:=1 to n do
  17. begin
  18. if (r[i]>m) then
  19. begin
  20. m:=r[i];
  21. mx:=i;
  22. end;
  23. end;
  24. writeln(mx);
  25. dec(t);
  26. r[mx]:=0;
  27. x:=m div (n-1);
  28. y:=m mod (n-1);
  29. for i:=1 to n do
  30. begin
  31. if i=mx then continue;
  32. if y>0 then
  33. begin
  34. inc(r[i],x+1);
  35. dec(y);
  36. end else inc(r[i],x);
  37. end;
  38. until t=0;
  39. end;
  40. {///////////////////////files///////////////////////////////}
  41. procedure openfile(s:string);
  42. begin
  43. assign(input,s+'.in');reset(input);
  44. assign(output,s+'.out');rewrite(output);
  45. end;
  46. procedure closefile;
  47. begin
  48. close(input);
  49. close(output);
  50. end;
  51. {//////////////////////main program/////////////////////////}
  52. begin
  53. openfile('icow');
  54. reads;
  55. runs;
  56. closefile;
  57. end.

二、化装晚会

链接:https://jzoj.net/junior/#contest/show/1333/1

这道题好像可以二分。。。我一开始编二分,结果错了。。。

暴搜后六十,当我以为是什么时间超限时,运行时错误立刻让我明白了为什么

数组开小了!!!

题目简化:

就是在1~n中选两个的和小于或等于s,能有多少方案

正解:

二分是可以的,排序后再二分。

也可以暴力。。数据太水。。。

  1. var
  2. n,s,i,j,l,r,mid,bz:longint;
  3. a:array[0..20000]of longint;
  4. ans:int64;
  5. b:boolean;
  6. {////////////////read&write/////////////////////////////////}
  7. procedure reads;
  8. begin
  9. readln(n,s);
  10. j:=0;
  11. for i:=1 to n do
  12. begin
  13. inc(j);
  14. readln(a[j]);
  15. if a[j]>=s then dec(j);
  16. end;
  17. n:=j;
  18. end;
  19. procedure writes;
  20. begin
  21. writeln(ans);
  22. end;
  23. {////////////////runs///////////////////////////////////////}
  24. procedure runs;
  25. procedure qsort(l,r:longint);
  26. var
  27. i,j,mid:longint;
  28. begin
  29. i:=l;
  30. j:=r;
  31. randomize;
  32. mid:=a[l+random(r-l)];
  33. repeat
  34. while a[j]>mid do dec(j);
  35. while a[i]<mid do inc(i);
  36. if i<=j then
  37. begin
  38. a[0]:=a[i];
  39. a[i]:=a[j];
  40. a[j]:=a[0];
  41. dec(j);
  42. inc(i);
  43. end;
  44. until i>j;
  45. if i<r then qsort(i,r);
  46. if l<j then qsort(l,j);
  47. end;
  48. begin
  49. qsort(1,n);
  50. for i:=1 to n-1 do
  51. for j:=i+1 to n do
  52. if a[i]+a[j]<=s then inc(ans)else break;
  53. {
  54. for i:=1 to n do
  55. begin
  56. l:=i+1;
  57. r:=n;
  58. repeat
  59. bz:=mid;
  60. mid:=(l+r)div 2;
  61. if bz=mid then break;
  62. if a[mid]+a[i]>s then r:=mid else
  63. begin
  64. if a[mid]+a[i]<=s then l:=mid;
  65. end;
  66. until false;
  67. inc(ans,mid-i);
  68. end;}
  69. end;
  70. {//////////////////files////////////////////////////////////}
  71. procedure openfile(s:string);
  72. begin
  73. assign(input,s+'.in');reset(input);
  74. assign(output,s+'.out');rewrite(output);
  75. end;
  76. procedure closefile;
  77. begin
  78. close(input);
  79. close(output);
  80. end;
  81. {////////////////main program///////////////////////}
  82. begin
  83. openfile('costume');
  84. reads;
  85. runs;
  86. writes;
  87. closefile;
  88. end.
  1. 类似于合法方案
  2. 链接:http://61.142.113.107:8080/oj/problem.php?id=1469

三、奶牛的比赛

链接:https://jzoj.net/junior/#contest/show/1333/2

考试时用拓扑排序算法(我也不知是不是,听别人说的)

结果不知为何答案错误

题目简化:

没什么好简化的,就是排名高一定打得过排名低的,

然后让电脑分析分析有哪个排名能确定

正解:

拓扑排序是可以的,只不过我错了。

还有一种floyed的方法:

设f[i,j]为i和j哪个赢,如果未知就为0,不然就为i或j

如果i<>j并且i打得过k,k打得过j,f[i,j]:=i;

最后循环,如果发现f[i,1..n]中有n-1(即包括自己)个是有关系的

就inc(ans)。

  1. var
  2. n,s,i,j,l,r,mid,bz:longint;
  3. a:array[0..20000]of longint;
  4. ans:int64;
  5. b:boolean;
  6. {////////////////read&write/////////////////////////////////}
  7. procedure reads;
  8. begin
  9. readln(n,s);
  10. j:=0;
  11. for i:=1 to n do
  12. begin
  13. inc(j);
  14. readln(a[j]);
  15. if a[j]>=s then dec(j);
  16. end;
  17. n:=j;
  18. end;
  19. procedure writes;
  20. begin
  21. writeln(ans);
  22. end;
  23. {////////////////runs///////////////////////////////////////}
  24. procedure runs;
  25. procedure qsort(l,r:longint);
  26. var
  27. i,j,mid:longint;
  28. begin
  29. i:=l;
  30. j:=r;
  31. randomize;
  32. mid:=a[l+random(r-l)];
  33. repeat
  34. while a[j]>mid do dec(j);
  35. while a[i]<mid do inc(i);
  36. if i<=j then
  37. begin
  38. a[0]:=a[i];
  39. a[i]:=a[j];
  40. a[j]:=a[0];
  41. dec(j);
  42. inc(i);
  43. end;
  44. until i>j;
  45. if i<r then qsort(i,r);
  46. if l<j then qsort(l,j);
  47. end;
  48. begin
  49. qsort(1,n);
  50. for i:=1 to n-1 do
  51. for j:=i+1 to n do
  52. if a[i]+a[j]<=s then inc(ans)else break;
  53. {
  54. for i:=1 to n do
  55. begin
  56. l:=i+1;
  57. r:=n;
  58. repeat
  59. bz:=mid;
  60. mid:=(l+r)div 2;
  61. if bz=mid then break;
  62. if a[mid]+a[i]>s then r:=mid else
  63. begin
  64. if a[mid]+a[i]<=s then l:=mid;
  65. end;
  66. until false;
  67. inc(ans,mid-i);
  68. end;}
  69. end;
  70. {/////////////////files////////////////////////////////////}
  71. procedure openfile(s:string);
  72. begin
  73. assign(input,s+'.in');reset(input);
  74. assign(output,s+'.out');rewrite(output);
  75. end;
  76. procedure closefile;
  77. begin
  78. close(input);
  79. close(output);
  80. end;
  81. {////////////main program/////////////////////////////////}
  82. begin
  83. openfile('costume');
  84. reads;
  85. runs;
  86. writes;
  87. closefile;
  88. end.

四、贝茜的晨练计划

链接:https://jzoj.net/junior/#contest/show/1333/3

我一看就知道是DP,可是考试时半天想不出来

于是暴搜10分。

题目简化:

没什么好简化的,每一分钟内可以跑d[i]米或休息到不累。

正解:

DP。

设f[i,j]为i分钟时疲劳度为j

f[i,0]=f[i-1,0](f[i,0]的初值,必须在第一和第二重循环之间)

f[i,0]=max(f[i,0],f[i-j,j])(i>=j防止负数)

f[i,j]=max(f[i,j],f[i-1,j-1]+d[i]);

  1. var
  2. f:array[0..10000,0..500]of longint;
  3. d:array[1..10000]of longint;
  4. n,m,i,j,ans:longint;
  5. {///////////reads&writes////////////////////////////////////}
  6. procedure reads;
  7. begin
  8. readln(n,m);
  9. for i:=1 to n do readln(d[i]);
  10. end;
  11. procedure writes;
  12. begin
  13. writeln(f[n,0]);
  14. end;
  15. {/////////////runs//////////////////////////////////////////}
  16. procedure runs;
  17. function max(a,b:longint):longint;
  18. begin
  19. if a>b then exit(a)else exit(b);
  20. end;
  21. begin
  22. for i:=1 to n do
  23. begin
  24. f[i,0]:=f[i-1,0];
  25. for j:=1 to m do
  26. begin
  27. if i>=j then f[i,0]:=max(f[i,0],f[i-j,j]);
  28. f[i,j]:=max(f[i,j],f[i-1,j-1]+d[i]);
  29. end;
  30. end;
  31. end;
  32. {/////////////////files////////////////////////////////////}
  33. procedure openfile(s:string);
  34. begin
  35. assign(input,s+'.in');reset(input);
  36. assign(output,s+'.out');rewrite(output);
  37. end;
  38. procedure closefile;
  39. begin
  40. close(input);
  41. close(output);
  42. end;
  43. {////////////main program///////////////////////////////////}
  44. begin
  45. openfile('cowrun');
  46. reads;
  47. runs;
  48. writes;
  49. closefile;
  50. end.

今天心情好,发得比之前多得多,同时我想,我该为自己负责,所以才发了这么多。

只有养成不要敷衍的好习惯,水平必定会上升。

题外话:

1.我想投诉后面的新学生,很吵,吵到没得思考。

2016.8.15上午纪中初中部NOIP普及组比赛的更多相关文章

  1. 2016.8.18上午纪中初中部NOIP普及组比赛

    2016.8.18上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1336 翻!车!啦!好吧,那是因为大神归来. 进度: 比赛:AC ...

  2. 2016.8.17上午纪中初中部NOIP普及组比赛

    2016.8.17上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1335 本来觉得自己能考高分,但只得160分,并列第九.至少又挤 ...

  3. 2016.8.16上午纪中初中部NOIP普及组比赛

    2016.8.16上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1334 这次也翻车了,感觉比之前难多了. 辛辛苦苦改完了,太难改 ...

  4. 2016.8.19上午初中部NOIP普及组比赛总结

    2016.8.19上午初中部NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1338 这次总结发得有点晚啊!我在这里解释一下, 因为浏览器的问 ...

  5. 2016.9.15初中部上午NOIP普及组比赛总结

    2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...

  6. 2016.9.24初中部上午NOIP普及组比赛总结

    2016.9.24初中部上午NOIP普及组比赛总结 2016.09.24[初中部 NOIP普及组 ]模拟赛 其实这次我没比赛,早上去参加亲子活动去了. 不过在下午我做完了所有的题,感觉还好. 进度 现 ...

  7. 2016.10.29初中部上午NOIP普及组比赛总结

    2016.10.29[初中部 NOIP普及组 ]模拟赛 做得好爽! 进度: 比赛:35+45+AC+0=180 改题:AC+AC+AC+0=300 幸运的数 有点无语--之前怕超限,还特意利用程序打了 ...

  8. 2016.9.17初中部下午NOIP普及组比赛总结

    2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...

  9. 2016.10.7初中部上午NOIP普及组比赛总结

    2016.10.7初中部上午NOIP普及组比赛总结 这次的题还可以,重新入了比赛的前十. 进度: 比赛:90+10+70+30=200 改题:AC+AC+AC+AC=AK 找试场 这题很简单,但是被欺 ...

随机推荐

  1. 线性回归——Python代码实现

    import numpy as np def computer_error_for_give_point(w, b, points): # 计算出 观测值与计算值 之间的误差, 并累加,最后返回 平均 ...

  2. ECMS清除挂马以及后台升级实战(从ecms6.6~ecms7.0)

    当时状况 Windows Server 2008 R2 Enterprise + 帝国CMS6.6 + MySql   server软件: Microsoft-IIS/7.5 操作系统: WINNT ...

  3. java oop第12章_IO、序列化和反序列化

    引言:数据通常通过文件系统保存在外存中,有时需要将他们读取到程序中进行一些操作,Java针对文件系统的操作提供了一套规范,即IO,针对计算机内存而言,输入的称为输入流,输出的称为输出流. 一.     ...

  4. Samza系统架构

  5. 组合,模板,bolck块

    如果前面和后面的变量名相同,则后面的变量名会覆盖前面的变量名 模板可以多次使用,只需要将is指定template的name,就可以重复使用该模板,只需要将不同的item值赋值给data就可以实现. 可 ...

  6. codeforces 24d Broken robot 期望+高斯消元

    题目传送门 题意:在n*m的网格上,有一个机器人从(x,y)出发,每次等概率的向右.向左.向下走一步或者留在原地,在最左边时不能向右走,最右边时不能像左走.问走到最后一行的期望. 思路:显然倒着算期望 ...

  7. Servlet中的Filter怎么使用?

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  8. NOI2019赛前两周被吊打记录

    7.1 T1看了半天发现会个暴力FWT,然后突然返发现随便容斥一下就好了 T2猜了个只有13和23的,结果打个表发现伪了,然后标号不只一种连搜索都写错了,也没想过可以轮廓线dp,菜哭了o(╥﹏╥)o ...

  9. 《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?

    DNS服务器,即域名服务器,它作为域名和IP地址之间的桥梁,在互联网访问中,起到至关重要的作用.每一个互联网上的域名,背后都至少有一个对应的DNS.对于一个企业来说,如果你的DNS服务器因为攻击而无法 ...

  10. thinkphp 表单合法性检测

    在处理表单提交的数据的时候,建议尽量采用Think\Model类提供的create方法首先进行数据创建,然后再写入数据库. 大理石平台厂家 create方法在创建数据的同时,可以进行更为安全的处理操作 ...