题解:P12949 [GCJ Farewell Round #1] ASCII Art
_Fireflies_ · · 题解
题目传送门
思路:
看到题解区有找规律的和倍增结合二分的,那我太菜了就不得不拿出暴力做法了。
看数据范围发现
然后实现稍微有一点点细节,可以看代码。
完整代码:
#include <bits/stdc++.h>
using namespace std;
const long long ma=1000000000000;
long long zh[300005];
int main(){
zh[0]=0;
long long s=0,px;
for(int i=1;i<=1145141919;i++){
s+=i*26;
zh[i]=s;
if(s>ma){
px=i;
break;
}
}
long long t,x;
cin>>t;
for(int i=1;i<=t;i++){
cin>>x;
x--;
int u;
for(int j=1;j<=px;j++){
if(zh[j]>=x){
u=j;
break;
}
}
cout<<"Case #"<<i<<": ";
if(zh[u]==x) cout<<"A\n";
else if(u==1) cout<<char(x+'A')<<endl;
else cout<<char(((x-zh[u-1])/u)+'A')<<endl;
}
return 0;
}