ACM一道题RE求解。。。
Lilei和Hanmeimei学习很用功,几年下来已经把学校的课程都学完了,但是为了继续提高水平,他们决定从皇家图书馆借书,但是皇家图书馆离他们的学校很远,借书很不方便。好在皇家图书馆作为全国最大的图书馆,推出了很人性化的服务,他们可以为公民免费邮寄图书,这让Lilei和Hanmeimei很高兴。皇家图书馆规定,办理借书卡需要缴100$的押金,每张借书卡每次借书最多借一本,最多只能累计借N本书,每本书可以借6个月,并为持卡人提供免费的邮寄图书服务,但是还书时的邮费要由持卡人自行承担,每本书的邮费是1$。Lilei和Hanmeimei现在已经很牛X了,在规定借书期限内完全可以看完借的书,但是他们没有想到,知识的海洋是如此广阔,一本书里的某个知识需要到另外一本书里才能找到,另外一本书里的知识只有在另另外一本书里才有,所以,Lilei和Hanmeimei要同时借很多书才能学会某个知识。比如,看1号书的第1章的时候需要看2号书的第2章,看2号书的第2章的时候需要看4号书的第3章,看4号书的第3章的时候需要看1号书的第2章,看1号书的第2章的时候需要看3号书的第1章,由于知识结构是呈链式的,只能按顺序看,不然可能走火入魔,所以看书的书序是1,2,4,1,3。再次重申,从图书馆借书是有数量限制的,假设图书馆最多只能累计借书3本,所以,要借3号书必须还一本书,才能把3号书借来。由于Lilei和Hanmeimei都不算富裕,只有一张借书卡,而且他们想尽可能的节省邮费,于是他们按照网上提供的图书的目录,制定了一条借书链,计划每天看一本,等借书链里的书全部看完后要全部还掉。但是,这条链有时候会很长,Lilei和Hanmeimei都不想把时间花在计算如何借书上,所以请你帮他们设计一套借书计划,使得他们花的运费最少。
input:
问题有多组数据
每组数据第一行有三个正整数N,M,K(N<100,M<50,K<500),分别表示图书种类和最多可以借多少本书和借书链的长度,图书的编号是从0~N-1
下面包含K个整数,范围在[0,N)内,用空格隔开,表示要看的书的序列
output:
每组数据输出一个整数,表示最少需要花邮费多少$。
sample
input:
4 3 10
0 1 2 0 3 2 3 0 1 2
output:
5
以下是我的程序:
#include<stdio.h>
typedef struct sBook
{
int check;
bool inBook;
}sBook;
int main()
{
int N,M,K;
while(3==scanf("%d %d %d",&N,&M,&K))
{
int line[500];
sBook book[50];
int i,j;
int checkTimes=1;
int count;
int mark;
for(i=0;i<K;i++)
{
scanf("%d",&line[i]);
book[line[i]].inBook=false;
book[line[i]].check=0;
}
for(i=0;i<M;i++)
{
book[line[i]].inBook=true;
}
for(i=i;i<K;i++)
{
if(book[line[i]].inBook==false)
{
if(M<(K-i))
count=M;
else
count=(K-i);
for(j=i;j<K;j++)
{
if(book[line[j]].check<checkTimes)
{
book[line[j]].check++;
if(book[line[j]].inBook==true)
{
count--;
if(count==0)
mark=line[j];
}
}
}
checkTimes++;
if(mark>-1)
book[mark].inBook=false;
book[line[i]].inBook=true;
}
}
printf("%d\n",checkTimes+M-1);
}
return 0;
}
OJ上提示是runtime error。。。我测试了好多数据 在自己机子上都是编译通过并且答案正确 求高手解答。。。