UVA 10025 - The ? 1 ? 2 ? ... ? n = k problem

来源:互联网 发布:mac的airplay在哪里 编辑:程序博客网 时间:2024/05/01 08:09

题目链接 点击打开链接


首先正负数的结果是一样的。这道题可以先打表,把等差数列前n项和求出,用lower bound找到最小的pos,使得a[pos]大于输入的数。因为等差数列有的项要变为负数,所以一反一正,减小了“ 2*某一个数”,所以如果pos为所求,充要条件是    (a[pos]-t)%2==0。若不满足,pos++即可~~~


做这题WA了好几发,思路没问题,原因是a数组开的太大,结果我又脑残用了int,到后来直接溢出了……

还有一个问题 输出两个换行。。。而且最后一个数据不要输出两个换行。。。


AC代码

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<iomanip>#include<stdlib.h>#include<set>#include<map>#include<queue>using namespace std;int a[50005];int main(){    int i,j;    a[1]=1;    for(i=2;i<=50003;i++)    {        a[i]=i+a[i-1];    }    int n;    cin>>n;    for(i=0;i<n;i++)    {        int t;        cin>>t;        t=abs(t);        int pos=lower_bound(a+1,a+50000,t)-a;        int cha;        while(true)        {            cha=a[pos]-t;            if(cha%2==0)            {                cout<<pos<<endl;                break;            }            else pos++;        }        if(i!=n-1)cout<<endl;    }    return 0;}


0 0
原创粉丝点击