【NOIP2018模擬賽2018.10.20】蒲公英的約定

題目

在這裏插入圖片描述
在這裏插入圖片描述


題解

–這一看就是數論題。。。個鬼呀
發現最後要使異或值爲0,那lastans必須要等於c
然後又因爲lastans^ c=b <=> lastans=b ^ c
所以我們倒着異或,就可以得到每個x,再快速冪,得到每個b
就可以得到所有答案

這種噁心的題
絕對有毒


代碼

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;

int p;
int n,a[MAXN],c[MAXN];
int x[MAXN],b[MAXN];

int Pow(long long a,int b){
	long long ans=1;
	while(b){
		if(b&1)
			ans=(ans*a)%p;
		a=(a*a)%p;
		b>>=1;
	}
	return ans%p;
}

int main(){
	cin>>p;
	n=1;
	while(scanf("%d%d",&a[n],&c[n])==2)
		n++;
	n--;
	for(int i=n-1;i>=1;i--){
		x[i]=b[i+1]^c[i+1];
		b[i]=Pow(1ll*a[i],x[i]);
	}
	for(int i=1;i<n;i++)
		printf("%d\n",x[i]);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章