実現したいこと
atcoder begginer contest 304 c virus を解きたい。
前提
atcoder begginer contest 304 c virus を解いていたところ、一部のテストケースで不正解となる
発生している問題・エラーメッセージ
例えば、
9 4
3 2
6 -1
1 6
6 5
-2 -3
5 3
2 -3
2 1
2 6
に対してYes
No
No
Yes
Yes
Yes
Yes
Yes
No
と出力されなけばならないのに
Yes
No
No
Yes
No
Yes
No
Yes
No
と出力される。
該当のソースコード
c++
1ソースコード 2#include <iostream>3#include <cstdio>4#include <cstdlib>5#include <algorithm>6#include <cmath>7#include <vector>8#include <set>9#include <map>10#include <unordered_set>11#include <unordered_map>12#include <queue>13#include <ctime>14#include <cassert>15#include <complex>16#include <string>17#include <cstring>18#include <chrono>19#include <random>20#include <bitset>21#include <array>22using namespace std;23//setに存在しない人が感染していることを示す24set<int> se;25int n, d;26vector<int> x(2000);27vector<int> y(2000);28//今の地点からd以内の人を探す29void virus(int now) {30 for (int i = 0; i < n; i++) {31 if (!(i == now - 1)) {32 if (se.count(i + 1)) {33 if ((x[now] - x[i]) * (x[now] - x[i]) + (y[now] - y[i]) * (y[now] - y[i]) <= d*d) {34 se.erase(i + 1);35 virus(i);36 }37 }38 }39 }40}41int main() {42 cin >> n >> d;43 44 for (int i = 0; i < n; i++) {45 cin >> x.at(i) >> y.at(i);46 se.insert(i + 1);47 }48 se.erase(1);49 int now = 0;50 virus(now);51 for (int i = 0; i < n; i++) {52 if (se.count(i + 1))53 cout << "No" << endl;54 else cout << "Yes" << endl;55 56 }57 58 59}60 61### 試したこと 62 63いろいろデバックしてみて、再帰関数virusのところに問題があるようであることはわかったが、デバックではそこのところは見れなかった。 64 65### 補足情報(FW/ツールのバージョンなど) 66

0 コメント