整数序列
    对于任意的3个正整数N、P、Q
    编程确定是否存在这样一个含N个整数的整数序列,使得序列中任意的P个连续整数之和为正,使得序列中任意的P个连续整数之和为正,而对任意Q个连续整数之和为负。
    如果存在这样的序列,请输出该序列,否则输入“NO”
    输入文件  input.txt    格式为  N  P  Q
    输出文件  output.txt   "NO"或满足条件的一个整数序列
________________________________
示例          input.txt                 output.txt
              N   P   Q 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 1            4   2   3                 NO
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 2            6   5   3                 -3  5  -3  -3  5  -3
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

解决方案 »

  1.   

    我想说的是:这样的序列即使是有也是很特殊的。因为,比如说N=10,P=3,Q=2;
    序列为:a,b,c,d,e,f,g,h,i,j;
    则:a+b+c>0;又a+b<0;b+c<0;
    所以a>0,c>0;
    而:b+c+d>0,c+d<0;
    所以b>0,所以:a+b>0,b+c>0,这与a+b<0,b+c<0矛盾
    更一般的可以证明,满足你的条件的序列是不存在的。
    因此输出为NO;
      

  2.   

    确实,N, P, Q的关系很有意思,你可以把他们的取值画成一张表,就会发现似乎有规律。但具体是什么我还不知道。
      

  3.   

    现在我发现的是:
    1。当P或Q取0时,另一方可以取0到N的任何值;
    2。P和Q的取之不能相同。
    3。P和Q的取值具有交换率,既若P=a,Q=b成立,则P=b,Q=a也成立。
    现在就这么多。
      

  4.   

    当然,我说的情况是N>=max(P,Q)*max(p,1);
      

  5.   

    现在这样想:
    假如现在已有这样的一组数,任意m个大于0,任意n个小于0。
    现在设P=m+1,Q=n,且假设新数组的取值成立。
    只要在数组的最前面加让一个数使新数组成立,这样的数是存在的。
    这样就可以通过递归找到所有P>m的数组了。
    同理,保持P不变,也可以递归找到所有Q>n的数组了。
      

  6.   

    问题是现在怎样证明P或Q的取值规律。
    我猜想P或Q的取值在一个连续的范围内,从某个值开始,到另一个直结束,其间的值都成立。
      

  7.   

    知道了,按上面的方法就可以证明。
    上面插入的数有一个取值的范围,其个数加上下界就是成立的P或Q的最小值,加上上界就是P或Q的最大值,其间是线性的。
    呵呵