제출 #15040

#제출 시각아이디문제언어결과실행 시간메모리
15040cki86201씽크스몰 (kriii3_TT)C++98
20 / 30
2909 ms34444 KiB
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;

#define X first
#define Y second
typedef long long ll;
typedef pair<double,double> Pd;

const double PI = 3.141592653589793238;

inline Pd mul(Pd A,Pd B){return Pd(A.X * B.X - A.Y * B.Y, A.X * B.Y + A.Y * B.X);}
inline Pd OMG(double x){return Pd(cos(2*PI/x), sin(2*PI/x));}
inline Pd pls(Pd A,Pd B,int t){return Pd(A.X + t*B.X, A.Y + t*B.Y);}

typedef vector<Pd> vb;

void DFT(vb &F,int L,int t)
{
	if(L==1)return;
	vb A(L/2),B(L/2);
	int i;
	for(i=0;i<L;i++){
		if(i&1)B[i>>1] = F[i];
		else A[i>>1] = F[i];
	}
	DFT(A,L/2,t);
	DFT(B,L/2,t);
	Pd now = Pd(1,0);
	for(i=0;i<L/2;i++){
		F[i] = pls(A[i], mul(now,B[i]), 1);
		F[L/2+i] = pls(A[i], mul(now,B[i]), -1);
		now = OMG((double)L/(i+1)*t);
	}
}
ll change(double x){return x>0?(ll)(x+0.1):(ll)(x-0.1);}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	int i;
	for(i=0;max(n,m)>=1<<i;i++);
	int expo = 1<<(i+1);
	vb A(expo), B(expo);
	for(i=n;i>=0;i--)scanf("%lf",&A[i].X);
	for(i=m;i>=0;i--)scanf("%lf",&B[i].X);
	DFT(A,expo,1), DFT(B,expo,1);
	for(i=0;i<expo;i++)A[i] = mul(A[i],B[i]);
	DFT(A,expo,-1);
	for(i=0;i<expo;i++)A[i].X /= expo;
	int lim = expo-1;
	while(lim){
		if(fabs(A[lim].X) > 1e-1)break;
		lim--;
	}
	ll ans = 0;
	for(i=lim;i>=0;i--)ans ^= change(A[i].X);
	printf("%lld",ans);
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...