結果
問題 |
No.438 Cwwプログラミング入門
|
ユーザー |
![]() |
提出日時 | 2016-10-28 23:43:17 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,502 bytes |
コンパイル時間 | 805 ms |
コンパイル使用メモリ | 94,944 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-24 20:46:38 |
合計ジャッジ時間 | 7,675 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 78 WA * 11 RE * 9 |
ソースコード
#define _USE_MATH_DEFINES #include<iostream> #include<sstream> #include<vector> #include<string> #include<algorithm> #include<map> #include<unordered_map> #include<math.h> #include<iterator> using namespace std; long long dp[1<<12+1]; template<typename T> T gcd( T m, T n ) { // 引数に0がある場合は0を返す if ( ( 0 == m ) || ( 0 == n ) ) return 0; // ユークリッドの方法 while( m != n ) { if ( m > n ) m = m - n; else n = n - m; } return m; } template<typename T> T* hoge( T m, T n ) { T* ans = new T[3]; T d[2]={m,n}; T x[2]={1,0}; T y[2]={0,1}; while(d[1]!=0){ T q = d[0]/d[1]; T tmp =d[0]; d[0]=d[1]; d[1]=tmp%d[1]; tmp = x[0]; x[0]=x[1]; x[1]=tmp-q*x[1]; tmp = y[0]; y[0]=y[1]; y[1]=tmp-q*y[1]; ans[0]=x[0]; ans[1]=y[0]; ans[2]=d[0]; } return ans; } template<typename T> T value(T a,T b,T c,T t,T u,T v){ return abs(b*t+u*c) + abs(-a*t+v*c); } int main(){ string fuck="mourennaihasimasenn"; long long x,y,z; cin >> x >> y >> z; long long xygcd=gcd(x,y); if( z % xygcd!= 0){ cout <<fuck<<endl; return 0; } x/=xygcd; y/=xygcd; z/=xygcd; long long *ho = hoge(x,y); long long a,b,c,u,v; a = x/ho[2]; b = y/ho[2]; c = z/ho[2]; u = ho[0]; v = ho[1]; long long lmin=-10000000000; long long lmax= 10000000000; for (int i = 0; i < 100000; i++) { long long center1 = (lmax-lmin)/3+lmin; long long center2 = (lmax-lmin)/3*2+lmin; if(value(a,b,c,center1,u,v)>value(a,b,c,center2,u,v)){ lmin = center1; }else{ lmax = center2; } } int prefix = (lmin+lmax)/2; int buf = 100000; for (int i = -buf; i < buf; i++) { long long t =prefix+i; if(value(a,b,c,t,u,v)>5010)continue; string output; for (int j = 0; j < abs(b*t+u*c); j++) { output+='c'; } if(b*t+u*c<0){ output+='c'; output+='c'; for (int j = 0; j < abs(b*t+u*c)+1; j++) { output+='W'; } }else{ for (int j = 0; j < abs(b*t+u*c)-1; j++) { output+='C'; } } for (int j = 0; j < abs(-a*t+v*c); j++) { output+='w'; } if(-a*t+v*c<0){ for (int j = 0; j < abs(-a*t+v*c)-1; j++) { output+='W'; } }else{ for (int j = 0; j < abs(-a*t+v*c)-1; j++) { output+='C'; } } output+='C'; if(output.length()<10000){ cout << output<<endl; return 0; } } cout << fuck<<endl; }