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,然后用循环找出最大的值。

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

var
n,t,i,j,x,y,m,mx:longint;
r:array[0..1000]of longint;
{////////////////////reads////////////////////////////////}
procedure reads;
begin
readln(n,t);
for i:=1 to n do readln(r[i]);
end;
{/////////////////////runs&writes///////////////////////////}
procedure runs;
begin
repeat
m:=0;
mx:=0;
for i:=1 to n do
begin
if (r[i]>m) then
begin
m:=r[i];
mx:=i;
end;
end;
writeln(mx);
dec(t);
r[mx]:=0;
x:=m div (n-1);
y:=m mod (n-1);
for i:=1 to n do
begin
if i=mx then continue;
if y>0 then
begin
inc(r[i],x+1);
dec(y);
end else inc(r[i],x);
end;
until t=0;
end;
{///////////////////////files///////////////////////////////}
procedure openfile(s:string);
begin
assign(input,s+'.in');reset(input);
assign(output,s+'.out');rewrite(output);
end;
procedure closefile;
begin
close(input);
close(output);
end;
{//////////////////////main program/////////////////////////}
begin
openfile('icow');
reads;
runs;
closefile;
end.

二、化装晚会

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

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

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

数组开小了!!!

题目简化:

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

正解:

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

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

var
n,s,i,j,l,r,mid,bz:longint;
a:array[0..20000]of longint;
ans:int64;
b:boolean;
{////////////////read&write/////////////////////////////////}
procedure reads;
begin
readln(n,s);
j:=0;
for i:=1 to n do
begin
inc(j);
readln(a[j]);
if a[j]>=s then dec(j);
end;
n:=j;
end;
procedure writes;
begin
writeln(ans);
end;
{////////////////runs///////////////////////////////////////}
procedure runs;
procedure qsort(l,r:longint);
var
i,j,mid:longint;
begin
i:=l;
j:=r;
randomize;
mid:=a[l+random(r-l)];
repeat
while a[j]>mid do dec(j);
while a[i]<mid do inc(i);
if i<=j then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
dec(j);
inc(i);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
begin
qsort(1,n);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]+a[j]<=s then inc(ans)else break;
{
for i:=1 to n do
begin
l:=i+1;
r:=n;
repeat
bz:=mid;
mid:=(l+r)div 2;
if bz=mid then break;
if a[mid]+a[i]>s then r:=mid else
begin
if a[mid]+a[i]<=s then l:=mid;
end;
until false;
inc(ans,mid-i);
end;}
end;
{//////////////////files////////////////////////////////////}
procedure openfile(s:string);
begin
assign(input,s+'.in');reset(input);
assign(output,s+'.out');rewrite(output);
end;
procedure closefile;
begin
close(input);
close(output);
end;
{////////////////main program///////////////////////}
begin
openfile('costume');
reads;
runs;
writes;
closefile;
end.
    类似于合法方案
链接: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)。

var
n,s,i,j,l,r,mid,bz:longint;
a:array[0..20000]of longint;
ans:int64;
b:boolean;
{////////////////read&write/////////////////////////////////}
procedure reads;
begin
readln(n,s);
j:=0;
for i:=1 to n do
begin
inc(j);
readln(a[j]);
if a[j]>=s then dec(j);
end;
n:=j;
end;
procedure writes;
begin
writeln(ans);
end;
{////////////////runs///////////////////////////////////////}
procedure runs;
procedure qsort(l,r:longint);
var
i,j,mid:longint;
begin
i:=l;
j:=r;
randomize;
mid:=a[l+random(r-l)];
repeat
while a[j]>mid do dec(j);
while a[i]<mid do inc(i);
if i<=j then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
dec(j);
inc(i);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
begin
qsort(1,n);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]+a[j]<=s then inc(ans)else break;
{
for i:=1 to n do
begin
l:=i+1;
r:=n;
repeat
bz:=mid;
mid:=(l+r)div 2;
if bz=mid then break;
if a[mid]+a[i]>s then r:=mid else
begin
if a[mid]+a[i]<=s then l:=mid;
end;
until false;
inc(ans,mid-i);
end;}
end;
{/////////////////files////////////////////////////////////}
procedure openfile(s:string);
begin
assign(input,s+'.in');reset(input);
assign(output,s+'.out');rewrite(output);
end;
procedure closefile;
begin
close(input);
close(output);
end;
{////////////main program/////////////////////////////////}
begin
openfile('costume');
reads;
runs;
writes;
closefile;
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]);

var
f:array[0..10000,0..500]of longint;
d:array[1..10000]of longint;
n,m,i,j,ans:longint;
{///////////reads&writes////////////////////////////////////}
procedure reads;
begin
readln(n,m);
for i:=1 to n do readln(d[i]);
end;
procedure writes;
begin
writeln(f[n,0]);
end;
{/////////////runs//////////////////////////////////////////}
procedure runs;
function max(a,b:longint):longint;
begin
if a>b then exit(a)else exit(b);
end;
begin
for i:=1 to n do
begin
f[i,0]:=f[i-1,0];
for j:=1 to m do
begin
if i>=j then f[i,0]:=max(f[i,0],f[i-j,j]);
f[i,j]:=max(f[i,j],f[i-1,j-1]+d[i]);
end;
end;
end;
{/////////////////files////////////////////////////////////}
procedure openfile(s:string);
begin
assign(input,s+'.in');reset(input);
assign(output,s+'.out');rewrite(output);
end;
procedure closefile;
begin
close(input);
close(output);
end;
{////////////main program///////////////////////////////////}
begin
openfile('cowrun');
reads;
runs;
writes;
closefile;
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. Ubuntu 更新国内镜像源失败

    Ubuntu 更新国内镜像源失败 首先打开系统原来的/etc/apt/sources.list 查看,原来的仓库地址是 https 还是 http 如果是http那么说明本机的 CA 证书有问题,运行 ...

  2. linux inode节点数报警处理

    1.问题描述 zabbix 收到一台服务器的Free inodes is less than 20% on volume / 报警 登陆服务器查看 产生原因:一般就是小文件比较多,占用大量的inode ...

  3. 【学术篇】2.28测试T2 线段 拓扑排序

    题目: 思路: 看到这种找前后的题目... 第一反应就是拓扑排序_(:з」∠)_ 每条线段都有左右两个端点咯, 然后就乱搞吧.. 我们用\(i\)和\(i'\)分别表示第\(i\)条线段的左右端点.. ...

  4. leetcode-168周赛-1296-划分数字为连续数字的集合

    题目描述: 自己的提交: class Solution: def isPossibleDivide(self, nums: List[int], k: int) -> bool: c = col ...

  5. JUC 一 ConcurrentHashMap

    java.util.concurrent ConcurrentHashMap是一个支持并发检索和并发更新的线程安全的HashMap(但不允许空key或value). JDK8以CAS+synchron ...

  6. thinkphp PATH_INFO支持

    如果发生在本地测试正常,但是一旦部署到服务器环境后会发生只能访问首页的情况,很有可能是你的服务器或者空间不支持PATH_INFO所致. 系统内置提供了对PATH_INFO的兼容判断处理,但是不能确保在 ...

  7. luoguP4768 [NOI2018]归程

    传送门 kruskal重构树: kruskal合并两个联通块时合并的边一定是联通块中权值最大的边,小于等于这条边的边所能联通的所有点在这个联通块中. 在合并两个联通块的时候新建一个点作为两个联通块代表 ...

  8. NX二次开发-UFUN获取圆柱的参数UF_MODL_ask_cylinder_parms

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize( ...

  9. NX二次开发-C++ CopyFile函数的用法

    NX9+VS2012 #include<Windows.h> CopyFile("D:\\test.prt","D:\\1\\test123.prt" ...

  10. Unity中的值传递与引用传递

    1. 值类型 值类型变量本身保存了该类型的全部数据,当声明一个值类型的变量时,该变量会被分配到栈(Stack)上. 2. 引用类型 引用类型变量本身保存的是位于堆(Heap)上的该类型的实例的内存地址 ...