Codeforces_352B_Jeff and Periods(排序)

题型:简单题


题意

有n个数,a1, a2, ..., an,现在想要找到所有的x,x满足:

1、x出现在这n个数中;

2、每一次出现的x的下标要满足等差数列。

按升序求出所有的x和x下标满足的公差d,如果x只出现一次,则d输出0。

样例解释:

          8

           1 2 1 3 1 2 1 5

下标:0 1 2 3 4 5 6 7

总共有4个满足条件的数,

1出现的下标为0 2 4 6,公差为2

2出现的下标为1 5,公差为4

3出现了一次,d为0

5出现了一次,d为0

所以输出;          4

                            1 2

                            2 4

                            3 0

                            5 0


分析

为了控制在O(n)时间内,用结构体保存这n个数及其下标,进行排序,然后再将数组扫一遍即可完成。


代码

#include
#include
#include
#include
#include
#include
using namespace std;

struct node{
    int h,id;
}x[123456];

bool cmp(node a,node b){
    if(a.h == b.h) return a.id < b.id;
    else return a.h < b.h;
}

int v[123456],w[123456];

int main(){
    int n;
    while(~scanf("%d",&n)){
        memset(v,0,sizeof(v));
        memset(w,0,sizeof(w));
        for(int i=0;i


你可能感兴趣的:(ACM)