cf 490 C.Hacking Cyperer(無言)
2123 ワード
http://codeforces.com/contest/490/problem/C
試験場で冗談をするという意味です。
これをハナーに分解して、端modに乗ればいいです。
毛のために試験場で妄想をたくましくしますか?
試験場で冗談をするという意味です。
これをハナーに分解して、端modに乗ればいいです。
毛のために試験場で妄想をたくましくしますか?
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,(a),sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const ll getint() { ll r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }
const int N=1e6+5;
char s[N];
bool ok[N];
int n;
long long a, b;
int main() {
scanf("%s", s+1);
n=strlen(s+1);
read(a); read(b);
int pos=-1;
ll k=0, p=1;
for3(i, n, 1) {
k=(k+(ll)(s[i]-'0')*p)%b;
p=(p*10)%b;
if(s[i]-'0'==0) continue;
if(k==0) ok[i]=1;
}
k=0;
for1(i, 1, n-1) {
k=(k*10+s[i]-'0')%a;
if(k==0 && ok[i+1]==1) {
pos=i;
break;
}
}
if(pos==-1) { puts("NO"); return 0; }
puts("YES");
for1(i, 1, pos) putchar(s[i]); puts("");
for1(i, pos+1, n) putchar(s[i]);
return 0;
}