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的特判。