POJ 2453
#include <iostream> using namespace std; int countBits(int n) { int count=0; //MSBから順に,立っているかチェック for (unsigned int mask=0x80000000; mask>0; mask>>=1) { if (mask & n) count++; } return count; } int main() { int n; while (true) { cin >> n; if (n == 0) break; int cn = countBits(n); do { n++; } while (countBits(n) != cn); cout << n << endl; } return 0; }
間違えたポイント
演算子の優先順位
if (mask & n > 0)
って書くと,if (mask & (n > 0))と解釈される?みたいではまった.
maskの最大値
(0 <= I <= 1000000)だから,32ビット全部やらなくていいか〜とおもってmask=0x80000(20ビット目)から始めてしまった.本当はI=1000000のときJは20ビット以上になる可能性があるので,これではダメ.結局32ビットやるようにした.
maskのビット数
unsigned intにしないと32ビット丸々使えない.
巨大な数を扱う時
変数に入りきらなそうだったら,mod 1000000009とかした値を使うと有効な場合がある.
POJ 1046
#include <iostream> #include <stdio.h> using namespace std; int main(){ int r[16],g[16],b[16]; for (int i=0; i<16; i++) { cin >> r[i] >> g[i] >> b[i]; } int rr,gg,bb; while (cin >> rr >> gg >> bb) { if (rr==-1 && gg==-1 && bb==-1) break; int d2,mind2=256*256*256,mini=0; for (int i=0;i<16;i++) { d2 = ((r[i]-rr)*(r[i]-rr)+(g[i]-gg)*(g[i]-gg)+(b[i]-bb)*(b[i]-bb)); if (d2<mind2) {mind2=d2;mini=i;} } printf("(%d,%d,%d) maps to (%d,%d,%d)\n", rr,gg,bb,r[mini],g[mini],b[mini]); } return 0; }
SRM 144 DIV2 250
class Time { public String whatTime(int seconds) { int h = seconds / 3600; seconds = seconds % 3600; int m = seconds / 60; seconds = seconds % 60; return h + ":" + m + ":" + seconds; } }
Practice Roomで練習してみました.
クラスはpublicにしないとエラーが出るのね.
POJ 1028
#include <iostream> #include <vector> using namespace std; int main(){ vector<string> urls; urls.push_back("http://www.acm.org/"); int idx = 0; string cmd; while (true) { cin >> cmd; if (cmd == "QUIT") return 0; else if (cmd == "VISIT") { for (int i=urls.size()-1; i>idx; i--) { urls.pop_back(); } string url; cin >> url; urls.push_back(url); idx++; } else if (cmd == "BACK"){ if (idx <= 0) { cout << "Ignored" << endl; continue; } idx--; } else if (cmd == "FORWARD") { if (idx >= urls.size()-1) { cout << "Ignored" << endl; continue; } idx++; } cout << urls[idx] << endl; } return 0; }