kmjp's blog

競技プログラミング参加記です

yukicoder : No.1819 Mirrored 2

こちらはあまり考えず解いてしまった。
https://yukicoder.me/problems/no/1819

問題

素数P,Qと正整数X,Yが与えられる。
正整数Nに対し、Nの10進数表記を反転させleading zeroを取り除いた表記を取る値をrev(N)とする。
N % P = X
rev(N) % Q = Y
を満たすNを答えよ。
なお、P=90007で固定とする。

解法

Pが小さいことを利用する。
M % Q = YとなるM、すなわちM=kQ+Yをk=0~10^6程度まで総当たりしよう。
Mのうち1の位が0でなく、かつrev(M) % P = Xとなるものを見つければよい。

ll P,Q,X,Y;

ll rev(ll v) {
	ll w=0;
	while(v) {
		w=w*10+v%10;
		v/=10;
	}
	return w;
}

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>P>>Q>>X>>Y;
	FOR(i,10000000) {
		ll V=(ll)i*Q+Y;
		ll W=rev(V);
		if(V%10==0) continue;
		if(W%P==X) {
			cout<<W<<endl;
			return;
		}
	}
}

まとめ

想定解じゃなかった。