TOJ 2776 CD Making

时间:2024-09-14 12:06:38

TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html

这题其实就是考虑的周全性。。。  贡献了好几次WA, 后来想了半天才知道哪里有遗漏。最大的问题就是, 当零头是13的时候, 不一定前面的光盘都刻录到最大值。比如29,16这种情况, 如果前面的刻录最大值,这样就需要3个盘,而最少的却是 2个就够了,(15,14) 即可;知道这种情况,这题基本就可以了;

注意一下这几个数据:

13 15 输出为2

29 16 输出为2

这条题目看起来很容易,但是特殊情况很多。稍微考虑得不全面,就会有情况没有考虑到。

我们按b来分类:

1如果b<=12,那很爽,直接a/b就可以;

2如果b=13,那也很爽,直接把b当成12做就可以;

3如果b=14,如果最后一张CD里放了13首歌,那就只好再来一张;

4如果b>=15,如果最后一张CD里放了13首歌,不需要再来一张CD,从前一张里放一首在最后一张即可;

但是这样就有一个问题,如果只有1张CD,没有前面一张。这种情况下只有加一张CD。

至此,所有的可能性都讨论到了。

#include<iostream>
using namespace std; int main()
{
int group;
cin >> group; while(group > )
{ int a = ;
int b = ;
int c = ; group--; cin >> a >> b;
int sum = ; if(b == )//b==13的情况
b = ;
sum = a / b;
c = a % b;
if(c!=)
sum = sum + ; if(c == &&(b==||sum==))//注意此处
//if(c==13)//这样不对
sum = sum + ;
cout << sum << endl; }
return ;
}

相关文章