csu 10月 月赛 J 题
2013-10-02 16:39
330 查看
Description
CSU又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧)。在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非零数位上的数字不相等(奖学金都是非负整数,如果一个同学没有得到奖学金,我们也可以认为学校发给ta的奖学金为0)。
然而,如果你问这里的孩子拿了多少奖学金,ta不会直接告诉你拿到了多少奖学金,而会告诉你ta拿到的奖学金数大于某一个整数X。同时为了不产生歧义,ta所说的那个数和ta所拿到的那个奖学金数目之间不会存在任何一个数满足学校发奖的规矩。
现在你已经知道了每个同学说的那个整数X,你能确切地说出每个同学得到了多少奖学金吗?
Input
一组测试数据。第一个数N,表示接下来有N个同学告诉了你ta的获奖信息(N<10000)
接下来每行一个整数X,表示一名同学所说的那个整数X。(X不超过int范围)
Output
总共N行,每行一个数,表示该同学拿到了多少奖学金。题目保证每个同学实际拿到的奖学金数目不会超过10 ^8。(Orz,学霸啊)
Sample Input
5 1 10 20 98 15995112Sample Output
2 12 21 100 16000000HINT
对于64位整形,请用%lld,或者cin,cout。T_TCSU_LQ
今天的水题特别多,我们A了6题,不错,纪念下;
这也是个水题,纯模拟;
这个题稍微有点繁琐,为了锻炼自己的逻辑,还是硬着头皮敲了遍;
代码:
#include<cstdio> #include<cstring> using namespace std; char s[20]; int l,t,ce; bool flag,ff; int check() { for(int i=1; i<l; i++)if(s[i]!='0'&&s[i]==s[i-1])return i; return 0; } void add(int ce) { s[ce]++; while(s[ce]>'9') { if(ce==0) { flag=1; s[ce]='0'; break; } s[ce]='0'; s[--ce]++; } } int main() { scanf("%d",&t); while(t--) { scanf("%s",&s); if(s[0]=='-'){puts("0");continue;} l=strlen(s); flag=0,ff=1; add(l-1); if(l>1)while(1) { int ce=check(); if(ce==0)break; if(ff) { for(int i=ce+1; i<l; i++)s[i]='0'; ff=0; } add(ce); } if(flag)printf("1"); puts(s); } return 0; }
View Code
相关文章推荐
- csu 10月 月赛 D 题 CX and girls
- csu 10月 月赛 I 题 The Contest
- csu 10月 月赛 H 题 A Very Hard Problem
- csu 10月 月赛 A 题
- csu 10月 月赛 B 题 Scoop water
- csu 10月 月赛 F 题 ZZY and his little friends
- 【luogu10月月赛】一道中档题 Factorial(数论)
- CSUACM月赛 1970
- HDU10月月赛总结
- 【codevs10月月赛(第三次)】day 1
- CSUACM月赛1971
- CSUACM月赛1972
- CSU5月月赛
- Vijos 10月月赛记录
- CSU 5月月赛B题
- 【洛谷月赛】洛谷10月月赛参·最后的狂欢
- csu8月月赛,csuoj1978
- CSU 1325: A very hard problem 中南月赛的一道题。
- CSU月赛1974
- CSU1503-点到圆弧的距离-几何