[刷题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]

[2016-03-08][codeforces][651][C][Watchmen]

CodeForces 651A Joysticks

codeforces651----A. Joysticks

CodeForces 651B

Codeforces #651(Div.2) D题题解(二分)