Codeforces 999C

这是题目
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 }
View Code

这道题我花费了一个小时,原因就是调试不过关。

好几次一直显示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了。

这个题,错误的原因是一样的,错误的表现是各种各样的。。。

猜你喜欢

转载自www.cnblogs.com/XCuber/p/9248630.html