• 解题:CF1130E Wrong Answer


    题面

    巧妙构造题

    这种题一定要限制一个条件,使得在这个条件下能推出要叉的代码的式子

    令序列$a$的第一个元素为负,其余元素为正,且保证序列中至少有两个元素,那么Alice的代码将会从第二个元素开始计算,得到$(n-1)*(sum-a[1])$的答案。而这里答案实际可能有两种,Alice那样的$(n-1)*(sum-a[1])$和全部选取的$n*sum$(因为后面全是正的所以其他方案一定劣于这两种)。我们后者-前者作个差得到$sum-n-a[1]$,不妨令$a[1]=-1$,那么只需要构造一个长度为$n$而总和为$k+n-1$的序列即可

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=2005,Maxx=1e6;
     6 int k,s,p,a[N];
     7 int main()
     8 {
     9     scanf("%d",&k);
    10     a[p=1]=-1,s=-1;
    11     while(p!=2000)
    12     {
    13         a[++p]=Maxx,s+=a[p];
    14         if(s-p+1>k) {s-=a[p],a[p]-=s+a[p]-p+1-k; break;}
    15     }
    16     s=0;
    17     for(int i=1;i<=p;i++) s+=a[i];
    18     if(s!=k+p-1) printf("-1");
    19     else
    20     {
    21         printf("%d
    ",p);
    22         for(int i=1;i<=p;i++)
    23             printf("%d ",a[i]);
    24     }
    25     return 0;
    26 }
    View Code
  • 相关阅读:
    js-依次循环异步请求(普通/ES6)
    jquery
    js
    selenium
    selenium
    selenium
    python
    selenium
    selenium
    selenium
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/10429657.html
Copyright © 2020-2023  润新知