C. ハッキングサイファー
テストごとの制限時間
1 秒
テストごとのメモリ制限
256 メガバイト
入力
標準入力
出力
標準出力
Polycarpus が参加しています新しい安全なメッセンジャーをハッキングするコンテスト。彼はほぼ勝利しました。
インタラクションプロトコルを注意深く研究した結果、Polycarpus はアプリケーションの公開鍵を適切に 2 つの部分に分割すれば秘密鍵を取得できるという結論に達しました。公開鍵は、100 万桁も含まれる長整数です。
Polycarpus は、公開鍵を空ではない 2 つの部分に分割し、最初の (左側) 部分が個別の数値として a で割り切れるような方法を見つける必要があります。 、2 番目(右)の部分は別の数として b で割り切れます。両方の部分は、先頭にゼロのない正の整数である必要があります。 Polycarpus は値 a と b を知っています。
Polycarpus を助けて公開鍵を切断する適切な方法を見つけてください。
入力
入力の最初の行にはメッセンジャーの公開鍵が含まれています。先頭にゼロのない整数。長さは 1 ~ 106 桁の範囲です。 2 行目には、スペースで区切られた正の整数 a, b (1?≤?a,?b?≤?108) のペアが含まれています。
出力
最初の行に「YES」と出力します (引用符なし)。 , 上記の条件を満たすメソッドが存在する場合。この場合、次に 2 行を出力します。カット後の左右の部分。これら 2 つの部分を連結すると、公開キーとまったく同一である必要があります。左側の部分は a で割り切れる必要があり、右側の部分は b で割り切れる必要があります。 2 つの部分は、先頭にゼロのない正の整数である必要があります。複数の回答がある場合は、いずれかを印刷してください。
回答がない場合は、「いいえ」を 1 行で印刷します (引用符なし)。
出力
11640102497 1024
入力
YES116401024
出力
2842545891539281719112818110001009 1000
入力
YES284254589153928171911281811000
出力
12012 1
また一次借鉴了袁学长的代码.. ..
还是自己太菜了,啥都不咋会...
比如怎么判断一大数能否被一数a整除
本题意: 前段が a を整除できるかどうか同時に後段が b を整除できるかどうか
思路: 前から後まで一巡记录前段が a を整除できる位置、前扫一遍の後、後段が調整可能な位置にあり、前段が調整可能である場合、循環を飛び越え、再出力し、出力NOかどうかを判断します能否被一数a整除,代码:
NO
AC代番号:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int main(){ char num[1000010]; int a; while(scanf("%s", num)!=EOF) { scanf("%d", &a); int cur = 0; for(int i=0; i<strlen(num); i++) { cur *= 10; cur += num[i]-'0'; cur %= a; } if(!cur)cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0;}