为什么不能用 pow
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int q,a[114514],i;
ll v;
memset(a,0,sizeof(a));
cin>>v>>q;
ll tmp=v;
for(i=0;tmp;i++)
{
a[i]=tmp%3;
tmp/=3;
}
while(q--)
{
int op,cnt;
tmp=0;
cin>>op>>cnt;
if(op==1)
{
a[cnt]++;
a[cnt]%=3;
i=max(i,cnt);
}
else if(op==2)
{
a[cnt]+=2;
a[cnt]%=3;
i=max(i,cnt);
}
else
{
if(a[cnt]==1) a[cnt]=2,i=max(i,cnt);
else if(a[cnt]==2) a[cnt]=1,i=max(i,cnt);
}
i=min(39,i);
for(int j=0;j<=i;j++)
tmp+=a[j]*pow(3,j);
cout<<tmp<<"\n";
}
}
WA
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int q,a[114514],i;
ll v;
memset(a,0,sizeof(a));
cin>>v>>q;
ll tmp=v;
for(i=0;tmp;i++)
{
a[i]=tmp%3;
tmp/=3;
}
while(q--)
{
int op,cnt;
tmp=0;
cin>>op>>cnt;
if(op==1)
{
a[cnt]++;
a[cnt]%=3;
i=max(i,cnt);
}
else if(op==2)
{
a[cnt]+=2;
a[cnt]%=3;
i=max(i,cnt);
}
else
{
if(a[cnt]==1) a[cnt]=2,i=max(i,cnt);
else if(a[cnt]==2) a[cnt]=1,i=max(i,cnt);
}
i=min(39,i);
for(int j=i;j>=0;j--)
tmp=tmp*3+a[j];
cout<<tmp<<"\n";
}
}
AC