651B
651A

点击可查看原题

651B是一个排序题,只不过多了一步去重然后记录个数。每次筛一层,直到全为0。从这个题里学到一个正确姿势:给定一个排好序的的数组,怎么把它变成一个去重加权的新数组。

只需要一个while循环+一个指针。

#define N 10
#include<iostream>
using namespace std;

int main()
{
    ,,,,,,,,,};
    int b[N]={};
    int c[N]={};
    ;
    ;
    while (p<N) {
        ;
        <N && a[p+]==a[p]) {
            p++;
            coup++;
        }
        b[cou]=a[p];
        c[cou]=coup;
        p++;
        cou++;
    }
    ;i<cou;i++) {  //N个数被压缩成了cou个数
        cout <<b[i] <<" " <<c[i] <<endl;
    }
    ;
}

/*输出结果
2 2
3 1
5 1
7 3
8 1
11 2
请按任意键继续. . .
*/

关于651A题,还是经验不够,从一开始的猜测贪心,发现WA,再到dp,发现也不行,再到记忆化搜索,大体行了,结果最后还是没有想到一个细节1和1的情况。

大体思路就是结果只由初始的a和b决定,而状态的转移情况也只有两种:给a充电和给b充电。所以直接搜索就行了,记得1和1的情况特判。

所以想了一通,结果贪心也是对的,只不过忘了1和1的特判。

05-07 15:29