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