2009-01-09
SRM374 Div1 Easy: SyllableSorting
275点問題。
System Testで{"baqibae","baebaqi"}で落ちる。結果の並び順について問題がちゃんと読めていなかった故。
class SyllableSorting { int vowelp(int c){ /// ← 返り値の型はboolでいい。intでもいいけど。ていうかpって何ww switch(c){ case 'a':case 'e':case 'i':case 'o':case 'u': return true; default: return false; } } vector<string> parse(string s){ vector<string> res; int st=1,l=sz(s),b=0; for(int i=0;i<l;i++){ if(vowelp(s[i])){ st=2; }else{ if(st==2){ res.pb(s.substr(b,i-b)); b=i; st=1; } } } if(b<l) res.pb(s.substr(b)); return res; } public: vector<string> sortWords(vector<string> words) { int n=sz(words); vector<pair<vector<string>,pair<vector<string>,string> > > res(n); rep(i,n){ vector<string> syls=parse(words[i]); vector<string> sorted(all(syls)); sort(all(sorted)); res[i]=make_pair(sorted,make_pair(syls,words[i])); } sort(all(res)); vector<string> ans(n); rep(i,n) ans[i]=res[i].second.second; return ans; } };
SRM375 Div1 Easy: DivisibleByDigits
- long longとか打ってるのが馬鹿馬鹿しい。typedef long long ll; は常備しないと。
- #define ... の行とか消しとかないと30% unused codeルールに引っかかって、消してまたsubmitとか時間のロス
- 7'40''
int gcd(int m, int n) { if (m == 0 || n == 0) return 0; if (m == 1 || n == 1) return 1; if (m == n) return m; while (1) { if (m == 0) return n; if (n == 0) return m; if (m > n) m %= n; else n %= m; } } int lcm(int m, int n) { return m / gcd(m,n) * n; } class DivisibleByDigits { public: long long getContinuation(int n) { long long de=1LL; for(int _=n;_>0;_/=10){ int r=_%10; if(r) de=lcm(de,r); } for(long long b=n,m=1;b<=LONG_LONG_MAX;b*=10,m*=10){ long long r=b%de; if(r==0)return b; long long s=de-r; if(s<=m-1)return b+s; } return 0; } };