- 基本思路:题目中保证了x,y,z不同时为1,所以我们可以枚举a,b,c来保存T(乱纪元)的值,这里我用STL中的set来保存T,set有去重的功能,并且可以自动升序排序,方便后续查找。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e12+10;
int x,y,z,q;
set<int> s;
signed main(){
cin>>x>>y>>z;
for(int i=0;i<=40;i++)
for(int j=0;j<=40;j++)
for(int k=0;k<=40;k++){
int temp=1LL*(pow(x,i)+pow(y,j)+pow(z,k));
if(temp<=1e13)
s.insert(temp);
}
cin>>q;
while(q--){
int x,year=1;
cin>>x;
auto pos=s.find(x);
while(*(++pos)==x+1)
x++;
auto it=s.find(x);
it++;
cout<<x+1<<' '<<*it-(x+1)<<endl;
}
}