不懂就问
  • 板块P10510 进制
  • 楼主Ravener
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/19 19:41
  • 上次更新2024/5/19 21:33:37
查看原帖
不懂就问
956382
Ravener楼主2024/5/19 19:41

为什么不能用 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

2024/5/19 19:41
加载中...