NC21774. 卖萌型选手
描述
输入描述
输入第一行包含一个整数T(T<=200000),表示T组测试数据,每组数据包含一个整数k(0<=k<=1018),代表小姐姐的忍耐上限
输出描述
输出T行,每行包含一个整数
代表鸡尾酒能达到的最高好感度。
示例1
输入:
3 1 3 9
输出:
1 1 5
C(clang 3.9) 解法, 执行用时: 170ms, 内存消耗: 4996K, 提交时间: 2019-11-12 19:50:07
#include<stdio.h> #include<math.h> int main() { long long n; scanf("%lld",&n); while(n--) { long long t,m,i,sum; t=sum=0; scanf("%lld",&m); i=pow(3*m,1.0/3)-1; t=sum=i*(i+1)*(2*i+1)/6; i++; while(sum<=m) { t=sum; sum=sum+i*i; i++; } printf("%lld\n",t); } return 0; }
C++14(g++5.4) 解法, 执行用时: 218ms, 内存消耗: 27368K, 提交时间: 2018-12-22 17:26:38
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e6+5; ll a[N]; int main(){ int T; cin>>T; for(int i=1;i<=N-5;i++){ a[i]=a[i-1]+1ll*i*i; } while(T--){ ll x; scanf("%lld",&x); int t=lower_bound(a+1,a+1+N,x)-a; if(a[t]>x)t--; printf("%lld\n",a[t]); } }
C++11(clang++ 3.9) 解法, 执行用时: 137ms, 内存消耗: 7260K, 提交时间: 2018-12-23 12:55:30
#include <stdio.h> #include <math.h> int main(){ int t; scanf("%d",&t); while(t--){ long long int k,s,i,j,n; scanf("%lld",&k); s=n=0; i=pow(3*k,1.0/3)-1; s=n=i*(i+1)*(2*i+1)/6; i++; while(n<=k){ s=n; n=n+i*i; i++; } printf("%lld\n",s); } return 0; }