最新消息:点击查看大S的省钱秘笈

Vijos P1203 CoVH之资料页数 C语言版

Vijos题解 Slyar 48浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

描述 Description

柯南已经从灰原哀那里得到了一些关于OIBH组织的情报, 他想在阿笠把整理的资料打印出来, 仔细研究.
这份资料的正文包含许多行,某些行可能包含一些脚注标记,一个脚注可能包含一行或多行,并且必须和对应的脚注标记印刷在同一页
一页所允许印刷的最多行数是已知的,任何一页都不允许超过该行数(包括脚注)
但是阿笠博士的纸不多了, 柯南只好尽可能的少用纸, 他想知道这份资料最少要用多少页

输入格式 Input Format

输入文件的第一行包含两个整数:文件的总行数N(2≤N≤1000)和该书每一页所能包含的最多行数K(2≤K≤1000),两数中间用空格隔开。
输入文件的第二行包含:一个整数F(1≤F≤100),表示该书所包含的脚注总数。
接下来的F行每行包含两个用空格隔开的整数X和Y,表示正文的第X行包含一个脚注标记,该脚注标记对应的脚注需要Y行,脚注将按它们在文件中被引用的先后排序。
注意:对于所有的输入数据,问题总是有解的。

输出格式 Output Format

输出文件仅一行,一个整数,表示该书所需的最少页数。

Tip:第一、边界问题。第二、一行可能有多个注解。第三、最后那页需要判断。我的方法可以避免第二个错误:设置数组全部为1,然后读取注解后加到数组内,最后对照k,满了就页数+1.

#include <stdio.h>

int main(){
int i,n,k,f,page=0,sum=0,x,y,z[1000];
for (i=1;i<=1000;i++) z[i]=1;
scanf("%d%d",&n,&k);
scanf("%d",&f);
for (i=1;i<=f;i++){
scanf("%d%d",&x,&y);
z[x]+=y;
}
for (i=1;i<=n;i++){
sum+=z[i];
if (sum>k){
page++;
sum=z[i];
}
if (sum==k){
page++;
sum=0;
}
}
if (sum>0) page++;
printf("%d",page);
system("pause");
return 0;
}

转载请注明:Slyar Home » Vijos P1203 CoVH之资料页数 C语言版

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址