[刷题codeforces]651B/651A
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[刷题codeforces]651B/651A相关的知识,希望对你有一定的参考价值。
651B |
651A |
点击可查看原题
651B是一个排序题,只不过多了一步去重然后记录个数。每次筛一层,直到全为0。从这个题里学到一个正确姿势:给定一个排好序的的数组,怎么把它变成一个去重加权的新数组。
只需要一个while循环+一个指针。
#define N 10 #include<iostream> using namespace std; int main() { int a[N]={2,2,3,5,7,7,7,8,11,11}; int b[N]={}; int c[N]={}; int p=0; int cou=0; while (p<N) { int coup=1; while (p+1<N && a[p+1]==a[p]) { p++; coup++; } b[cou]=a[p]; c[cou]=coup; p++; cou++; } for (int i=0;i<cou;i++) { //N个数被压缩成了cou个数 cout <<b[i] <<" " <<c[i] <<endl; } return 0; } /*输出结果 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的特判。
以上是关于[刷题codeforces]651B/651A的主要内容,如果未能解决你的问题,请参考以下文章
[2016-03-08][651][codeforces][B][Beautiful Paintings]