题目链接
题目大意:给你两个数字n,k,让你写一串数列,要求是这串数列的不同数字的数目不能少于k且长度为n,并且要求它各个区间和的种类最小。
很典型的思维题。。。额。。。首先说一下这道题自己为什么WA了,为了使各个区间和的种数最小,我想到写成正负交替,这样一来,选完区间后,和大多为零,直接重复到n,但是满足k-1后,其余项全部输出为0,会使其更简单,注意【i,i】这种区间,一开始考虑不周,疯狂WA,唉,后面看到大神代码后才明白(惨的不谈了)。
下面给出AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
//#include<bits/stdc++.h>
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;i<n;i++)
{
if(i) printf(" ");
printf("0");
}
}
else
{
bool flag=true;
int last=1;
for(int i=1;i<k;i++)
{
if(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;
}