| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1126 人关注过本帖
标题:ACM一道题RE求解。。。
只看楼主 加入收藏
savioryx28
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-11-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
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。。。我测试了好多数据 在自己机子上都是编译通过并且答案正确  求高手解答。。。
搜索更多相关主题的帖子: 求解 ACM 
2009-11-30 22:14
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:20 
居然没人顶····好长的一道题啊···
2009-12-02 22:34
keloy
Rank: 2
等 级:论坛游民
帖 子:107
专家分:16
注 册:2007-9-27
收藏
得分:0 
oj抽风是常有的事情的,但是一般是自己写错了,这个测试下某些极端情况,比如1,1,1啊什么的。一般re都是出在这些地方。我很久没写oj了,不好意思,该代码太痛苦了。您自己看下吧
2009-12-20 00:55
快速回复:ACM一道题RE求解。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017419 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved