PAT basic 1045

来源:互联网 发布:克里诺林裙淘宝 编辑:程序博客网 时间:2024/06/02 02:26
#include <iostream>#include <algorithm>#include <vector>int a[100000], b[100000], v[100000];using namespace std;int main() {    int n, max = 0, cnt = 0;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        scanf("%d", &a[i]);        b[i] = a[i];    }    sort(a, a + n);    for (int i = 0; i < n; i++) {        if(a[i] == b[i] && b[i] > max)            v[cnt++] = b[i];        if (b[i] > max)            max = b[i];    }    printf("%d\n", cnt);    for(int i = 0; i < cnt; i++) {        if (i != 0) printf(" ");        printf("%d", v[i]);    }    printf("\n");//不加这句会有一个测试点没法通过。.    return 0;}/*分析:对原序列sort排序,逐个比较,当当前元素没有变化并且它左边的所有值的最大值都比它小的时候就可以认为它一定是主元(很容易证明正确性的)。如果硬编码就直接运行超时了。。后来才想到这种方法。。一开始有一个测试点段错误。。后来才想到因为输出时候v[0]是非法内存。。改正后格式错误。。(好像可以说明那个第2个测试点是0个主元?。。)然后——加了最后一句printf(“\n”);才正确。。(难道是当没有主元的时候必须要输出空行吗。。)*/
原创粉丝点击