zoj 3365

来源:互联网 发布:java 排序算法总结 编辑:程序博客网 时间:2024/05/20 07:52

题意 给你一个序列  改变尽可能少的数使其成为公差为一 递增的等差数列 

 可以将给你的序列减去一个等差数列 即num[i] -= i,若得到的数全部相等, 则说明给你的序列本身就满足条件  则只要寻求num中出现次数最多的数  这些数就是不需要改变的数

/*************************************************************************    > Author: xlc2845       > Mail: xlc2845@gmail.com    > Created Time: 2013年10月26日 星期六 19时15分23秒 ************************************************************************/#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>using namespace std;int num[50050], n;int main(){    while(scanf("%d",&n) == 1)    {        for(int i = 0; i < n; i++)        {            scanf("%d",&num[i]);            num[i] -= i;        }        sort(num, num+n);        int temp = num[0], _max = 0, d = 1, result = num[0];        for(int i = 1; i < n; i++)        {            if(num[i] == temp) d++;            else            {                temp = num[i];                if(d > _max)                {                    _max = d;                    result = num[i-1];                }                d = 1;            }        }        if(d > _max)        {            _max = d;            result = num[n-1];        }        printf("%d\n",n-_max);        printf("%d",result);        for(int i = 1; i < n; i++)            printf(" %d",i+result);        puts("");    }    return 0;}



原创粉丝点击