这是题目
http://codeforces.com/problemset/problem/999/C
这是我的代码
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 using namespace std; 5 int main() 6 { 7 int a[30] = {0}; 8 string s; 9 int n, k, left = 0, p = 0; 10 cin >> n >> k; 11 cin >> s; 12 for (int i = 0; i < n; i++) 13 { 14 int c = s[i] - 'a'; 15 a[c] ++; 16 } 17 for (int i = 0; i < 26; i++) 18 { 19 if(k > a[i]) 20 { 21 k -= a[i]; 22 a[i] = 0; 23 } 24 else 25 { 26 p = i; 27 left = k; 28 break; 29 } 30 } 31 string ans; 32 for (int i = 0; i < n; i++) 33 { 34 int c = s[i] - 'a'; 35 if (c > p || (c == p && left == 0)) 36 cout << s[i]; 37 else if(c == p) 38 left --; 39 } 40 41 return 0; 42 43 }
这道题我花费了一个小时,原因就是调试不过关。
好几次一直显示Runtime Error,奇怪了,在luogu IDE上是能正常输入输出的,但在我的XCode上是类似段错误的结果,后来检查了N遍,试探着把a[]数组挪进了main()里,就终于解决了,到现在还没明白是为什么,之前我次次把数组放在main()外面。
现在终于可以正常交上去评测了,结果在第一个点就错了,发现是字符串数组没从零开始,快速改完,又交上去了。结果发现在第二个测试点又错了!
这个问题,我尝试输出了中间的a[0], a[1], a[2]发现有两个是六位数。。有点懵,明明已经用了memset(),数组绝对不是从零开始的!后来偶然地一次尝试,写了个a[30] = {0},顿时就输出正确了!我心想这次终于对了!于是我就输了第三个样例进去,结果呢???
我又检查一遍,发现玄机就在第19行,如果是原来写的 “>=” 的话,第三个样例“1 1 u”的u是不可能被标记上的!删了一个“=”后,我就AC了。
这个题,错误的原因是一样的,错误的表现是各种各样的。。。