糞問回
こどふぉはReadforcesとかいろいろ言われてましたがつまり糞問回でした
Aで早解き成功させて1287->1350(+63)、スペシャリストという人権いただきました
AOJ 2216
やるだけ
#include <cstdio> #include <cstring> int res[3]; int main() { int a, b; while (scanf("%d%d",&a,&b)) { if (!a&&!b) break; int r=b-a; res[2]=r/1000; r%=1000; res[1]=r/500; r%=500; res[0]=r/100; for (int i=0; i<3; i++) printf("%d%c",res[i],i==2?'\n':' '); } }
AOJ 2217
union-findのfindみたいな再帰使って書いた
#include <cstdio> #include <cstring> #include <set> using namespace std; struct P { int x, y; }; int n; int cnt[100][100]; P map[100][100]; int dfs(int y, int x, int c) { if (cnt[x][y]!=-1&&cnt[x][y]!=c) return cnt[x][y]; if (cnt[x][y]==c) return cnt[x][y]; cnt[x][y]=c; return cnt[x][y]=dfs(map[x][y].x,map[x][y].y,cnt[x][y]); } int main() { while (scanf("%d",&n)) { if (!n) break; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) scanf("%d%d",&map[i][j].x,&map[i][j].y); } memset(cnt,-1,sizeof(cnt)); int x=0; set<int> res; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if (cnt[i][j]==-1) { cnt[i][j]=++x; cnt[i][j]=dfs(map[i][j].x,map[i][j].y,cnt[i][j]); res.insert(cnt[i][j]); } } } printf("%d\n",res.size()); } }
Snowflakes
折り紙使って遊びながらやってたら時間かかったw
class Snowflakes { public: vector <string> flareOut( vector <string> snowflake ) { int sz=snowflake.size(); vector<string> half(sz); vector<string> qual(sz,""); vector<string> res(sz*2); for (int i=0; i<sz; i++) { for (int j=0; j<snowflake[i].length(); j++) qual[i]+=snowflake[i][j]; for (int j=i+1; j<sz; j++) qual[i]+=snowflake[j][i]; } for (int i=0; i<sz; i++) { string rev=qual[i]; reverse(rev.begin(),rev.end()); half[i]=rev+qual[i]; } for (int i=0; i<sz; i++) { res[i]=half[sz-1-i]; } for (int i=sz; i<sz*2; i++) { res[i]=half[i-sz]; } return res; } };
VolumeDiscount
ナップサックの逆バージョン
逆にしたとき一回例外処理ミスって1WAとか
class VolumeDiscount { public: int bestDeal( vector <string> priceList, int quantity ) { int sz=priceList.size(), q=quantity; int w[sz], p[sz]; int dp[sz+1][q+1]; // init for (int i=0; i<sz; i++) { fill(dp[i],dp[i]+q+1,inf); int j; string x=""; for (j=0; j<priceList[i].length(); j++) { if (priceList[i][j]==' ') { stringstream ss; ss<<x; ss>>w[i]; x=""; j++; break; } x+=priceList[i][j]; } for (;j<priceList[i].length();j++) { x+=priceList[i][j]; } stringstream ss; ss<<x; ss>>p[i]; } fill(dp[sz],dp[sz]+q+1,inf); // end; dp[0][0]=0; for (int i=0; i<sz; i++) { for (int j=0; j<=q; j++) { if (j<w[i]) { dp[i+1][j]=min(dp[i][j],p[i]); } else { dp[i+1][j]=min(dp[i][j],dp[i+1][j-w[i]]+p[i]); } } } return dp[sz][q]; } };
DancingSentence
やるだけ
class DancingSentence { public: string makeDancing( string sentence ) { bool flag=false; for (int i=0; i<sentence.length(); i++) { if (sentence[i]==' ') continue; if (flag) { sentence[i]=tolower(sentence[i]); flag=false; } else { sentence[i]=toupper(sentence[i]); flag=true; } } return sentence; } };
AOJ 2205
やるだけ
#include <iostream> #include <string> #include <algorithm> using namespace std; typedef long long ll; ll n, m; int main() { while (cin>>n>>m) { if (!n) break; string key[n]; ll score[n]; for (int i=0; i<n; i++) { string str; cin>>str>>score[i]; key[i]=str; } ll sum=0; for (int i=0; i<m; i++) { string str; cin>>str; for (int j=0; j<n; j++) { int k=0; while ((key[j][k]=='*'||key[j][k]==str[k])&&k<8) k++; if (k==8) { sum+=score[j]; break; } } } cout<<sum<<endl; } }
AOJ 0227
やるだけ
#include <cstdio> #include <algorithm> using namespace std; bool comp(const int& a, const int& b) { return a>b; } int n, m; int p[1000]; int main() { while (scanf("%d%d",&n,&m)) { if (!n&&!m) break; for (int i=0; i<n; i++) { scanf("%d",&p[i]); } sort(p,p+n,comp); for (int i=m-1; i<n; i+=m) { p[i]=0; } int res=0; for (int i=0; i<n; i++) { res+=p[i]; } printf("%d\n",res); } }
Codeforces A
やるだけ、早解き
#include <cstdio> int main() { int n, x, y; scanf("%d%d%d",&n,&x,&y); int come=(n*y+99)/100; if (come>=x) printf("%d\n",come-x); else puts("0"); }
Codeforces B
糞問1
改行のみの行は特別な処理をしなくてはならない雰囲気を醸し出してて実はしなくてよかったらしい・・・
おい
正解コードはぬるみねらるさんのを参考に
#include <iostream> #include <string> #include <vector> using namespace std; int main() { string str; bool newline=true; while (getline(cin,str)) { int len=str.length(); bool sharp=false; for (int i=0; i<len; i++) { if (str[i]!=' ') { if (str[i]=='#') sharp=true; break; } } if (sharp) { if (!newline) cout<<endl; cout<<str<<endl; newline=true; } else { for (int i=0; i<len; i++) { if (str[i]!=' ') cout<<str[i]; } newline=false; } } if (!newline) cout<<endl; }
Codeforces C
糞問2
なんたる物理ゲー
というか最初に正解方針を思いついていたらしいんだけど、追いつく条件とか色々考えてたら条件ごちゃごちゃつけくわえて結局WAコードになってたわけ
これまた他人のコードを参考に
#include <cstdio> #include <cmath> #include <climits> #include <algorithm> #define inf INT_MAX/2 using namespace std; struct bus { double t, v; double cost, time; }; bus bus[100000]; int main() { int n, a, d; scanf("%d%d%d",&n,&a,&d); double fastest=0.0; double x, y; for (int i=0; i<n; i++) { scanf("%lf%lf",&bus[i].t,&bus[i].v); x=(d-bus[i].v*bus[i].v/(2.0*a))/bus[i].v; // 速度限界に到達する地点からゴールまでにかかる時間 y=bus[i].t+(bus[i].v/a)+x; if (x<0) { // 速度限界に達する前にゴール y=bus[i].t+sqrt(2.0*d/(double)a); } if (fastest<=y) fastest=y; printf("%.10f\n",fastest); } }