考试时间 14:00 至 17:30
期望得分:40+60+60
实际得分:100+60+30
T1:题面如下(☄⊙ω⊙)☄
思路:最先想到的当然是暴力枚举
然鹅,我个傻缺竟然开始从1枚举到N。。(不T才怪~)
然后开始从N向小的枚举
但是尽管如此依旧无法拿到60分。。(学校机子慢的一批)
then
看到就想到需要字符读入,那么能不能直接对每个字符进行处理
然后就这样啦
处理一下awa
注意如果N符合各个数位是单调不减的就直接把N输出
还要注意先前导零的状况(awa——> @lzpclxf
还有看好数据范围非常重要的。。。
awa
现在!上代码
1 //40 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<iostream> 6 using namespace std; 7 char a[100005]; 8 int len; 9 int k; 10 void awa(int k) { 11 for(int i=1; i<k; i++) 12 cout<<a[i]; 13 if(a[k]-'0'-1!=0)cout<<a[k]-'0'-1; 14 for(int i=k+1; i<=len; i++)cout<<9; 15 } 16 int main() { 17 freopen("increase.in","r",stdin); 18 freopen("increase.out","w",stdout); 19 cin>>a+1; 20 len=strlen(a+1); 21 k=len; 22 for(int i=1; i<len; i++) { 23 if(a[i]==a[i+1]) { 24 if(a[k]==a[i])k=min(k,i); 25 else k=i; 26 if(a[i+1]>a[i+2]&&(i+2)<=len) { 27 awa(k); 28 fclose stdin; 29 fclose stdout; 30 return 0; 31 } 32 } 33 if(a[i]>a[i+1]) { 34 awa(i); 35 fclose stdin; 36 fclose stdout; 37 return 0; 38 } 39 } 40 cout<<a+1; 41 return 0; 42 }