- csp-j模拟赛3
lpl
- @ 2026-8-28 10:29:46
#include<bits/stdc++.h> using namespace std;
struct s{ int cnt; int lpl; };
int T; long long n[100005],k[100005]; long long num[37];
vector<queue>op;
int main()
{
cin>>T;
for(int i = 1;i<=T;i++)
cin>>n[i]>>k[i];
num[1] = 1;
for(int i = 2;i<37;i++)
num[i] = num[i-1]*3;
for(int i = 1;i<=T;i++)
{
queue<s>q;
op.push_back(q);
s test,start;
start.cnt = 0;
start.lpl = 0;
op[op.size()-1].push(start);
bool ui = false;
while(!op[op.size()-1].empty())
{
test = op[op.size()-1].front();
op[op.size()-1].pop();
if(test.cnt>n[i]||test.lpl>k[i])
continue;
else if(test.cnt==n[i]&&test.lpl==k[i])
{
ui = true;
break;
}
for(int j = 1;j<37;j++)
{
s tmp = test;
tmp.cnt += num[j];
tmp.lpl += 1;
if(tmp.cnt>n[i])
break;
else if(tmp.lpl>k[i])
break;
else op[op.size()-1].push(tmp);
}
}
if(ui) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
0 条评论
目前还没有评论...