Different Sums URAL - 2065 解题报告

题目链接
题目大意:给你两个数字n,k,让你写一串数列,要求是这串数列的不同数字的数目不能少于k且长度为n,并且要求它各个区间和的种类最小。

很典型的思维题。。。额。。。首先说一下这道题自己为什么WA了,为了使各个区间和的种数最小,我想到写成正负交替,这样一来,选完区间后,和大多为零,直接重复到n,但是满足k-1后,其余项全部输出为0,会使其更简单,注意【i,i】这种区间,一开始考虑不周,疯狂WA,唉,后面看到大神代码后才明白(惨的不谈了)。

下面给出AC代码:

#include
#include
#include
#include
//#include
using namespace std;
typedef pair<int,int > P;
typedef long long ll;

const int INF=0x3f3f3f3f;
const int MAX_N=50001 + 10;
int n,k;


int main()
{
    //ios::sync_with_stdio(false);
    while(scanf("%d %d",&n,&k)==2)
    {
        //首先满足K-1中不同的数字,正负正负交替和为0,最后一种全部输出为0,
        if(k==1)
        {
            for(int i=0;iif(i) printf(" ");
                printf("0");
            }
        }
        else
        {
            bool flag=true;
            int last=1;
            for(int i=1;iif(i!=1)  printf(" ");
                if(flag) {printf("%d",last); flag=false;}
                else  {printf("%d",-last); flag=true; last++; }
            }
            for(int i=k;i<=n;i++)
            {
                printf(" 0");
            }
        }
        printf("\n");
    }
    return 0;
}





你可能感兴趣的:(ACM补题集)