結果
問題 | No.1292 パタパタ三角形 |
ユーザー |
|
提出日時 | 2020-11-20 22:31:24 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 88 ms / 2,000 ms |
コード長 | 2,528 bytes |
コンパイル時間 | 4,934 ms |
コンパイル使用メモリ | 214,696 KB |
最終ジャッジ日時 | 2025-01-16 02:40:21 |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 |
ソースコード
//#include <atcoder/all>#include <bits/stdc++.h>typedef unsigned long long ULLONG;typedef long long LLONG;static const LLONG MOD_NUM = 1000000007LL; //998244353LLtemplate<class _T> static void get(_T& a) {std::cin >> a;}template<class _T> static void get(_T& a, _T& b) {std::cin >> a >> b;}template<class _T> static void get(_T& a, _T& b, _T& c) {std::cin >> a >> b >> c;}template <class _T> static _T tp_abs(_T a) {if (a < (_T)0) {a *= (_T)-1;}return a;}static void A_task();int main(){A_task();fflush(stdout);return 0;}enum {LeftUpper = 0,RightUpper,Bottom,LeftUnder,RightUnder,Top,};static std::pair<int, int> rot(std::map<int, char>& dir, std::pair<int, int> center, char edge){int nowEdge = 0;for (auto d : dir) {if (d.second == edge) {nowEdge = d.first;}}int x = 0, y = 0;switch (nowEdge) {case LeftUpper:dir[Top] = dir[RightUpper];dir[LeftUnder] = dir[Bottom];dir[RightUnder] = dir[LeftUpper];dir[RightUpper] = dir[Bottom] = dir[LeftUpper] = 0;x = 3;y = 1;break;case RightUpper:dir[Top] = dir[LeftUpper];dir[RightUnder] = dir[Bottom];dir[LeftUnder] = dir[RightUpper];dir[RightUpper] = dir[Bottom] = dir[LeftUpper] = 0;x = -3;y = 1;break;case Bottom:dir[LeftUnder] = dir[LeftUpper];dir[RightUnder] = dir[RightUpper];dir[Top] = dir[Bottom];dir[RightUpper] = dir[Bottom] = dir[LeftUpper] = 0;x = 0;y = -2;break;case LeftUnder:dir[LeftUpper] = dir[Top];dir[Bottom] = dir[RightUnder];dir[RightUpper] = dir[LeftUnder];dir[Top] = dir[LeftUnder] = dir[RightUnder] = 0;x = 3;y = -1;break;case RightUnder:dir[RightUpper] = dir[Top];dir[Bottom] = dir[LeftUnder];dir[LeftUpper] = dir[RightUnder];dir[Top] = dir[LeftUnder] = dir[RightUnder] = 0;x = -3;y = -1;break;case Top:dir[LeftUpper] = dir[LeftUnder];dir[RightUpper] = dir[RightUnder];dir[Bottom] = dir[Top];dir[Top] = dir[LeftUnder] = dir[RightUnder] = 0;x = 0;y = 2;break;}return std::pair<int, int>(center.first + x, center.second + y);}static void A_task(){std::string ptn;get(ptn);std::map<std::pair<int, int>, int> points;std::map<int, char> dir;dir[LeftUpper] = 'c';dir[Bottom] = 'a';dir[RightUpper] = 'b';std::pair<int, int> center(0, 1);points[center] = 1;int len = ptn.length();for (int i = 0; i < len; i++) {center = rot(dir, center, ptn[i]);points[center] = 1;}printf("%d\n", (int)points.size());}