超水二分。。。。。
<textarea readonly="readonly" name="code" class="c++">
#include<cstdio> #include<stdlib.h> #include<string.h> #include<string> #include<cmath> #include<cstring> #include<algorithm> #include<map> #include<set> #include<queue> #include<vector> using namespace std; typedef long long ll; ll n; int judge(ll x) { if(x*(x+1)/2<n) return 1; return 0; } int main() { int t; // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); scanf("%d",&t); while(t--){ scanf("%lld",&n); ll min=0,max=n+1; while(min+1<max) { ll mid=min+(max-min)/2; if(judge(mid)) { min=mid; } else { max=mid; } } ll t=min*(min+1)/2; ll k=n-t; ll ans=k%9; if(ans==0) printf("9\n"); else printf("%lld\n",ans); } return 0; }
</textarea>