多数のモジュロ接頭接尾ダイ金型

トレーニング1 - Gのタイトル

新しいセキュアメッセンジャーをハッキングのための競争の中でPolycarpusの参加。彼は、ほとんど勝っています。
慎重に対話プロトコルを研究した、Polycarpusは、彼が適切に二つの部分にアプリケーションの公開鍵をカットする場合、秘密鍵を得ることができるという結論に達しました。公開鍵でも百万の桁からなるものであってもよい長整数です!
Polycarpusは別番号、及び第二(右)の部分は別番号としてbで割り切れるように(左)最初の部分はで割り切れること二つ空でない部分に公開鍵をカットするような方法を見つける必要があります。両方の部分には先行ゼロを持たない正の整数でなければなりません。Polycarpusは値aとbを知っています。
ヘルプPolycarpusと公開鍵をカットするために、任意の適切な方法を見つけます。

入力

その長さは1〜106の数字の範囲にある、先行ゼロなしの整数 - 入力の最初の行は、メッセンジャーの公開鍵を含みます。2行目は、B(1≤、B≤108)スペースで区切られた正の整数のペアを含んでいます。

出力

第一のライン印刷で「YES」(引用符)、上記条件を満足する方法が存在する場合。この場合、次の印刷二行-切断後に左右部品。これらの2つの部分が、連結され、公開鍵とまったく同じでなければなりません。左側の部分は割り切れなければなりません、そして右の部分がBで割り切れなければなりません。二つの部分には先行ゼロを持たない正の整数でなければなりません。いくつかの答えがある場合は、それらのいずれかを印刷します。
応答がない場合は、単一の行(引用符なし)「NO」で印刷。

入力

116401024
97 1024

出力

YES
1.164万
1024個

入力

284254589153928171911281811000
1009 1000年

出力

YES
2842545891539
28171911281811000

入力

120
12 1

出力

番号

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
const int M = 10;//状压

string str;
ll a, b;
int v[maxn];
int index;
ll tmp;
bool flag;

int main()
{
	cin >> str;
	scanf("%lld%lld", &a, &b);
	tmp = 0;
	flag = 0;
	for (int i = 0; i < str.length(); i++)
	{
		tmp = (tmp * M + (ll)(str[i] - '0')) % a;
		if (tmp == 0 && str[i + 1] != '0')
			v[i] = 1;
	}
	tmp = 0;
	int in = 1;
	flag = 0;
	for (int i = str.length() - 1; i >= 0; i--)
	{
		tmp = (tmp + in * (str[i] - '0')) % b;
		in = (in * 10) % b;
		if (tmp == 0 && v[i - 1] == 1)
		{
			index = i;
			break;
		}
	}
	if (index == 0)
		printf("NO\n");
	else
	{
		printf("YES\n");
		for (int i = 0; i < str.length(); i++)
		{
			if (i == index)
				printf("\n");
			printf("%d", str[i] - '0');
		}
		printf("\n");
	}
	return 0;
}

:アイデア
正面から分割検索場所の後ろに2つの位置が一致した場合、バックからB位置で割り切れるを見つけ、先行ゼロなしで答えです。
決定するために0を用いて得られた弾性特性、モジュロ演算割り切れるかどうかを分析する:(+ b)は%N ==%N + B%をN。

公開された28元の記事 ウォンの賞賛0 ビュー336

おすすめ

転載: blog.csdn.net/xukeke12138/article/details/104626547