为什么 0分啊我和题解区copy的代码一起跑了几次,答案一样啊
查看原帖
为什么 0分啊我和题解区copy的代码一起跑了几次,答案一样啊
914982
15069356981wei楼主2024/5/30 14:32
#include<bits/stdc++.h>
using namespace std;

int k;

long long x;
long long y;
long long dx;
long long dy;
long long k3[101];
map<pair<long long,long long>,long long > mp2={{{0,0},1},{{0,1},4},{{0,2},1},{{1,2},2},{{1,1},3},{{1,0},2},{{2,0},1},{{2,1},4},{{2,2},1}};
map<pair<long long ,long long>,long long > mp={{{0,0},0},{{0,1},1},{{0,2},2},{{1,2},3},{{1,1},4},{{1,0},5},{{2,0},6},{{2,1},7},{{2,2},8}};
long long cal(int kk,long long x,long long y){
	if(kk==1){
	 	pair <long long ,long long> tmp;
		tmp.first=x;
		tmp.second=y;
//	int l=mp[tmp];
		
		return mp[tmp];
	}
	long long n=k3[kk];
	//cout<<n;
	long long i=x/(n/3);
	long long  j=y/(n/3);
	pair <long long,long long> tmp;
	tmp.first=i;
	tmp.second=j;
	long long l=mp[tmp];
	long long t=k3[kk-2];
	long long e=mp2[tmp];
	long long nx=0;
	long long ny=0;
	if(e==1){
		nx=x%(n/3);
		ny=y%(n/3);
		
	}else if(e==2){
		nx=x%(n/3);
		ny=y%(n/3);
		ny=n/3-ny-1;
	}else if(e==3){
		nx=x%(n/3);
		ny=y%(n/3);
		nx=n/3-nx-1;
		ny=n/3-ny-1;
	}else{
		nx=x%(n/3);
		ny=y%(n/3);
		nx=n/3-nx-1;
	}
//	cout<<x<<y<<" "<<l*(t*t*8)<<" "<<cal(kk-1,nx,ny)<<endl;
	return l*(t*t*8)+cal(kk-1,nx,ny)+(l==0?0:1);
}
int main(){
	k3[0]=1;
	for(int i=1;i<=100;i++){
		k3[i]=k3[i-1]*3;
	}
	cin>>k>>x>>y>>dx>>dy;

	long long d1=cal(k,x,y);
	long long d2=cal(k,dx,dy);
	long long ans=abs(d1-d2);
	cout<<ans<<endl;
	return 0;
}
2024/5/30 14:32
加载中...