#include <cstdio> #include <cstdlib> #include <set> #include <map> #include <cstring> #include <vector> #include <algorithm> #include <cmath> using namespace std; typedef long long int int64; char bufc[100010]; char stra[100010]; char strb[100010]; int cnta[26] = {0}, cntb[26] = {0}, cntc[26] = {0}; int gety(int x){ int y = 100000000; for(int lx = 0;lx < 26;lx++){ if(cntc[lx] < cnta[lx]*x) return -1; if(cntb[lx] != 0) y = min(y, (cntc[lx]-cnta[lx]*x)/cntb[lx]); } return y; } void build(char* str, int* cc){ for(int lx = 0;str[lx] != 0;lx++) cc[str[lx]-'a']++; return; } void func(int* c1, int* c2){ for(int lx = 0;lx < 26;lx++) c1[lx] -= c2[lx]; return; } void print(int* a){ for(int lx = 0;lx < 26;lx++) printf("%d ", a[lx]); puts(""); return; } int main(){ scanf("%s %s %s", bufc, stra, strb); build(bufc, cntc); build(stra, cnta); build(strb, cntb); int mx = 0, my = 0, mm = 0; for(int lx = 0;;lx++){ int x = lx, y = gety(x); if(y >= 0 and x+y >= mm) mx = x, my = y, mm = x+y; if(y < 0) break; } for(int lx = 0;lx < mx;lx++){ printf("%s", stra); func(cntc, cnta); } for(int lx = 0;lx < my;lx++){ printf("%s", strb); func(cntc, cntb); } for(int lx = 0;lx < 26;lx++) while(cntc[lx]--) printf("%c", 'a'+lx); puts(""); return 0; }
2015年7月2日 星期四
Codeforces Round #307 (Div. 2), problem: (B) ZgukistringZ
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言