結果
問題 | No.3032 ホモトピー入門 |
ユーザー |
![]() |
提出日時 | 2025-02-21 23:20:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,052 bytes |
コンパイル時間 | 2,507 ms |
コンパイル使用メモリ | 200,784 KB |
実行使用メモリ | 197,404 KB |
最終ジャッジ日時 | 2025-02-21 23:21:06 |
合計ジャッジ時間 | 16,657 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 WA * 10 |
ソースコード
//#pragma GCC target("avx2")//#pragma GCC optimize("O3")//#pragma GCC optimize("unroll-loops")#include <bits/stdc++.h>using namespace std;using ll = long long;using pii = pair<int,int>;using pll = pair<ll,ll>;using pli = pair<ll,int>;#define TEST cerr << "TEST" << endl#define AMARI 998244353//#define AMARI 1000000007#define el '\n'#define El '\n'#define YESNO(x) ((x) ? "Yes" : "No")#define VEC_UNIQ(v) sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end());#define REV_PRIORITY_QUEUE(tp) priority_queue<tp,vector<tp>,greater<tp>>//point からなるループの (x,y) から見た回転角度を求めるlong double kaiten(long double x, long double y,vector<pair<long double,long double>> point){int n = (int)point.size();for(int i = 0; i < n; i++){point[i].first -= x;point[i].second -= y;}//for(int i = 0; i < n; i++)cerr << point[i].first << ' ' << point[i].second << el;point.push_back(point.front());long double ans = 0;for(int i = 0; i < n; i++){long double x1,y1,x2,y2;tie(x1,y1) = point[i];tie(x2,y2) = point[i + 1];//cerr << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << el;long double dot = x1 * x2 + y1 * y2;long double cross = x1 * y2 - x2 * y1;ans += atan2(cross,dot);//cerr << ans << el;}return ans;}#define MULTI_TEST_CASE falsevoid solve(void){//問題を見たらまず「この問題設定から言えること」をいっぱい言う//一個回答に繋がりそうな解法が見えても、実装や細かい詰めに時間がかかりそうなら別の方針を考えてみる//添え字回りで面倒になりそうなときは楽になる言い換えを実装の前にじっくり考える//ある程度考察しても全然取っ掛かりが見えないときは実験をしてみる//よりシンプルな問題に言い換えられたら、言い換えた先の問題を自然言語ではっきりと書く//g++ -D_GLIBCXX_DEBUG -O2 f.cpp -o oint n;cin >> n;int m;cin >> m;int ans = 0;while(n--){string s;cin >> s;vector<pair<long double,long double>> point(1,pair(0,0));long double x = 0,y = 0;for(int i = 0; i < m; i++){if(s[i] == 'U')y += 0.01;if(s[i] == 'D')y -= 0.01;if(s[i] == 'L')x -= 0.01;if(s[i] == 'R')x += 0.01;point.push_back(pair(x,y));}long double kaiten1 = kaiten(0.005,0.005,point);long double kaiten2 = kaiten(-0.005,0.005,point);//cerr << kaiten1 / (2 * M_PI) << ' ' << kaiten2 / (2 * M_PI) << el;if(abs(kaiten1) <= M_PI && abs(kaiten2) <= M_PI)ans++;}cout << ans << el;return;}void calc(void){return;}signed main(void){cin.tie(nullptr);ios::sync_with_stdio(false);calc();int t = 1;if(MULTI_TEST_CASE)cin >> t;while(t--){solve();}return 0;}