SRM537 Div2
Easy
子音が6個で母音が2個で、母音が両方とも同じであれば"YES"でそうじゃなければ"NO"を出力する。
数えるだけ
class KingXNewBaby{ public: string isValid(string s) { int len = s.size(); if(len!=8) return "NO"; int a = 0; for(int i = 0; i < len; i++){ char c = s[i],d; if(c=='a' ||c=='i' ||c=='o' ||c=='u' ||c=='e'){ if(a){ if(c!=d) return "NO"; } a++; d = c; } } if(a == 2) return "YES"; return "NO"; } };
Medium
X*a+Y*b == A,B となるX,Yの個数を求める。
全探索です。範囲を間違えると落ちます。O(n^3)で解きましたが、if(X*i+Y*j==A)の部分を改良すればO(n^2)で解けます。
O(n^2)のコード(03/20 15:58編集)
class KingXNewCurrency{ int a[200],b[200],r[201]; public: int howMany(int A, int B, int X) { if(!(A%X) && !(B%X)) return -1; memset(r,0,sizeof(r)); if(A>B) swap(A,B); r[1]++; for(int Y = 2; Y <= B; Y++){ bool af = 0,bf = 0; int t; for(int i = 0; (t = X*i) <= B; i++){ if(A>=t && !((A-t) % Y)) af++; if(B>=t && !((B-t) % Y)) bf++; } if(af&&bf) r[Y]++; } int ans = 0; for(int i = 1; i <= B; i++) ans += r[i]; return ans; } };
Hard
確率だけど、解けなかった。
239.14 + 0.00 + 0.00 = 239.14
Rating 1025 -> 1031