HDU2446

来源:互联网 发布:上瘾网络剧 豆瓣评分 编辑:程序博客网 时间:2024/06/15 17:01
#include <iostream>#include<stdio.h>#include<math.h>using namespace std;long long int a[1800000],b[1800000];int searches(long long int s,int l,int n){       if(s==b[l])                return l;        if(s==b[n])                return n;        if(s>b[l]&&s<b[l+1])                return l;        if(s<b[n]&&s>b[n-1])                return n-1;        if(s>b[l]&&s<b[(l+n)/2])                return searches(s,l,(l+n)/2);        if(s<b[n]&&s>b[(l+n)/2])                return searches(s,(l+n)/2,n);}int searcs(long long int s,int l,int n){        if(s==a[l])                return l;        if(s==a[n])                return n;        if(s>a[l]&&s<a[l+1])                return l;        if(s<a[n]&&s>a[n-1])                return n-1;        if(s>a[l]&&s<a[(l+n)/2])                return searcs(s,l,(l+n)/2);        if(s<a[n]&&s>a[(l+n)/2])                return searcs(s,(l+n)/2,n);}int main(){        int i;        b[0]=a[0]=(long long int)0;        for(i=1;i<=1799999;i++)        {                a[i]=a[i-1]+(long long int)i;                b[i]=b[i-1]+a[i];        }        int t,n,p;        long long int s;while(scanf("%d",&t)!=EOF){        while(t--)        {                scanf("%lld",&s);                n=searches(s,1,1799999);                s=s-b[n];                if(s==0)                {                        printf("%d %d %d\n",n,n,n);                        continue;                }                                n++;                p=searcs(s,1,n);                if(s==a[p])                {                        printf("%d %d %d\n",n,p,p);                        continue;                }                s=s-a[p];                p++;                 printf("%d %d %d\n",n,p,s);        }}    return 0;}
二分即可,不过HDU用G++才不会WA,不知道为什么
1 0
原创粉丝点击