POJ_1218 THE DRUNK JAILER
英語読めるようになってきた。
そんなことより、Haskellできるようになりたい
問題
1からnまでのn個の部屋があり、すべて閉まっている。次の操作をn回行う。
[操作]現在i回目で、iで割りきれる部屋番号の部屋が、
開いている ->閉める
閉まっている->開ける
操作が終わった後、開いている部屋は何部屋か。
解法
やるだけ
実装
#include <cstdio> #include <algorithm> using namespace std; int solve(int N){ bool cell[N + 1]; int ans = 0; //false...locked true...unlocked fill(cell, cell + N + 1, false); for(int i = 1; i <= N; i++){ for(int j = i; j <= N; j += i){ cell[j] = !cell[j]; } } for(int i = 1; i <= N; i++){ if(cell[i]) ans++; } return ans; } int main(){ int n, N; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &N); printf("%d\n", solve(N)); } return 0; }