結果
問題 | No.954 Result |
ユーザー |
|
提出日時 | 2019-12-17 16:30:41 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 13,376 bytes |
コンパイル時間 | 2,825 ms |
コンパイル使用メモリ | 129,712 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-07 01:32:05 |
合計ジャッジ時間 | 3,716 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 7 |
other | AC * 27 WA * 2 |
ソースコード
#include <stdio.h>#include <sstream>#include <string.h>#include <vector>#include <map>#include <algorithm>#include <utility>#include <set>#include <cctype>#include <queue>#include <stack>#include <cstdio>#include <cstdlib>#include <cmath>#include <deque>#include <limits>#include <iomanip>#include <ctype.h>#include <unordered_map>#include <random>#define _USE_MATH_DEFINES#include <iostream>#include <math.h>using namespace std;typedef long long ll;typedef pair<int, int> pii;typedef pair<ll, ll> pll;typedef pair<int, char> pic;typedef priority_queue<pll, vector<pll>, greater<pll>> pllgreaterq;typedef priority_queue<pair<ll,pll>, vector<pair<ll, pll>>, greater<pair<ll, pll>>> plpllgreaterq;#define bit(x,v) ((ll)x << v)const ll INF = 1000000007;const int MAX = 310000;const int MOD = 1000000007;long long fac[MAX], finv[MAX], inv[MAX];void COMinit() {fac[0] = fac[1] = 1;finv[0] = finv[1] = 1;inv[1] = 1;for (int i = 2; i < MAX; i++) {fac[i] = fac[i - 1] * i % MOD;inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;finv[i] = finv[i - 1] * inv[i] % MOD;}}// 二項係数計算long long COM(int n, int k) {if (n < k) return 0;if (n < 0 || k < 0) return 0;return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;}ll gcd(ll a, ll b) {if (b == 0) return a;return gcd(b, a % b);}int pr[200010];int lank[200010];void uini(int n) {for (size_t i = 0; i <= n; i++){pr[i] = i;}}int parent(int x) {if (x == pr[x]) return x;return pr[x] = parent(pr[x]);}int same(int x, int y) {return parent(x) == parent(y);}bool unit(int x, int y) {int px = parent(x);int py = parent(y);if (px == py) return false;if (lank[px] < lank[py]) {pr[py] = px;lank[px] += lank[py] + 1;}else {pr[px] = py;lank[py] += lank[px] + 1;}return true;}ll bit[200010];int max_n = 200000;int pm = 0;void add(int x) {while (max_n >= x){bit[x]++;x += x & -x;}}void sub(int x) {while (max_n >= x){bit[x]--;x += x & -x;}}ll merge(ll* a, int left, int mid, int right) {ll n1 = mid - left;ll n2 = right - mid;vector<int> L(n1 + 1);vector<int> R(n2 + 1);for (size_t i = 0; i < n1; i++){L[i] = a[left + i];}for (size_t i = 0; i < n2; i++){R[i] = a[mid + i];}L[n1] = INF;R[n2] = INF;ll i = 0;ll j = 0;ll r = 0;for (size_t k = left; k < right; k++){if (L[i] <= R[j]) {a[k] = L[i];i++;}else {a[k] = R[j];r += n1 - i;j++;}}return r;}ll merge2(pair<int, char>* a, int left, int mid, int right) {ll n1 = mid - left;ll n2 = right - mid;vector<pair<int, char>> L(n1 + 1);vector<pair<int, char>> R(n2 + 1);for (size_t i = 0; i < n1; i++){L[i] = a[left + i];}for (size_t i = 0; i < n2; i++){R[i] = a[mid + i];}L[n1] = make_pair(INF, ' ');R[n2] = make_pair(INF, ' ');ll i = 0;ll j = 0;ll r = 0;for (size_t k = left; k < right; k++){if (L[i].first <= R[j].first) {a[k] = L[i];i++;}else {a[k] = R[j];r += n1 - i;j++;}}return r;}ll mergeSort2(pair<int, char>* a, int left, int right) {ll res = 0;if (left + 1 < right) {int mid = (left + right) / 2;res = mergeSort2(a, left, mid);res += mergeSort2(a, mid, right);res += merge2(a, left, mid, right);}return res;}ll mergeSort(ll* a, int left, int right) {ll res = 0;if (left + 1 < right) {int mid = (left + right) / 2;res = mergeSort(a, left, mid);res += mergeSort(a, mid, right);res += merge(a, left, mid, right);}return res;}int partition(pair<int, char>* a, int p, int r) {pair<int, char> x = a[r];int i = p - 1;for (size_t j = p; j < r; j++){if (a[j].first <= x.first) {i++;swap(a[i], a[j]);}}swap(a[i + 1], a[r]);return i + 1;}void quick(pair<int, char>* a, int p, int r) {if (p < r) {int q = partition(a, p, r);quick(a, p, q - 1);quick(a, q + 1, r);}}ll n;int ci = 0;ll P[1000010];struct Node {int key;int priority;Node* parent, * left, * right;Node(int key, int priority);Node() {}};Node NIL;Node::Node(int key, int priority) : key(key), priority(priority) {left = &NIL;right = &NIL;}Node* root = new Node();void cenrec(Node* k) {if (k->key == NIL.key) return;cenrec(k->left);cout << " " << k->key;cenrec(k->right);}void fastrec(Node* k){if (k->key == NIL.key) return;cout << " " << k->key;fastrec(k->left);fastrec(k->right);}void insert(Node* v) {Node* y = &NIL;Node* x = root;while (x->key != NIL.key){y = x;if (v->key < x->key) {x = x->left;}else {x = x->right;}}v->parent = y;if (y->key == NIL.key) {root = v;}else if (v->key < y->key) {y->left = v;}else {y->right = v;}}Node* find(Node* k, ll v){if (k->key == NIL.key) return &NIL;if (k->key == v) return k;if (v < k->key) return find(k->left, v);return find(k->right, v);}void delp12(Node* x) {if (x->key == NIL.key) return;Node* l = x->left;Node* r = x->right;Node* pr = x->parent;if (l->key == NIL.key&& r->key == NIL.key) {if (pr->left == x) {pr->left = &NIL;}else pr->right = &NIL;}else if (l->key != NIL.key) {if (pr->left == x) {pr->left = l;}else pr->right = l;l->parent = pr;}else if (r->key != NIL.key) {if (pr->left == x) {pr->left = r;}else pr->right = r;r->parent = pr;}}Node* get_next(Node* k) {if (k->key == NIL.key) return &NIL;Node* res = get_next(k->left);if (res->key != NIL.key) return res;return k;}void del(Node* x) {if (x->key == NIL.key) return;Node* l = x->left;Node* r = x->right;Node* pr = x->parent;if (l->key != NIL.key && r->key != NIL.key) {Node* nex = get_next(r);x->key = nex->key;delp12(nex);}else {delp12(x);}}Node* rightRotate(Node* t) {Node* s = t->left;t->left = s->right;s->right = t;return s;}Node* leftRotate(Node* t) {Node* s = t->right;t->right = s->left;s->left = t;return s;}Node* _insert(Node* t, int key, int priority) {if (t->key == NIL.key) {return new Node(key, priority);}if (key == t->key) {return t;}if (key < t->key) {t->left = _insert(t->left, key, priority);if (t->priority < t->left->priority) {t = rightRotate(t);}}else {t->right = _insert(t->right, key, priority);if (t->priority < t->right->priority) {t = leftRotate(t);}}return t;}Node* delete1(Node* t, int key);Node* _delete(Node* t, int key) {if (t->left->key == NIL.key && t->right->key == NIL.key) {return &NIL;}else if (t->left->key == NIL.key) {t = leftRotate(t);}else if (t->right->key == NIL.key) {t = rightRotate(t);}else{if (t->left->priority > t->right->priority) {t = rightRotate(t);}elset = leftRotate(t);}return delete1(t, key);}Node* delete1(Node* t, int key) {if (t->key == NIL.key) {return &NIL;}if (key < t->key) {t->left = delete1(t->left, key);}else if (key > t->key) {t->right = delete1(t->right, key);}else return _delete(t, key);return t;}int H;int left(int i) {return i * 2 + 1;}int right(int i) {return i * 2 + 2;}ll heap[2000010];void maxHeapify(int i) {int l = left(i);int r = right(i);int largest = 0;if (l < H && heap[l] > heap[i])largest = l;elselargest = i;if (r < H && heap[r] > heap[largest])largest = r;if (largest != i) {swap(heap[i], heap[largest]);maxHeapify(largest);}}int pare(int i) {return (i - 1) / 2;}void raise(int i) {int l = pare(i);if (l < 0) return;if (heap[l] < heap[i]) {swap(heap[i], heap[l]);raise(l);}}void minHeapify(int i) {int l = left(i);int r = right(i);int minimam = 0;if (l < H && heap[l] < heap[i])minimam = l;elseminimam = i;if (r < H && heap[r] < heap[minimam])minimam = r;if (minimam != i) {swap(heap[i], heap[minimam]);minHeapify(minimam);}}void buildMaxHeap() {for (int i = H / 2; i >= 0; i--){maxHeapify(i);}}int dx[] = { -1,0,1,0 };int dy[] = { 0,-1,0,1 };std::vector<int> find_all(const std::string str, const std::string subStr) {std::vector<int> result;int subStrSize = subStr.size();int pos = str.find(subStr);while (pos != std::string::npos) {result.push_back(pos);pos = str.find(subStr, pos + 1);}return result;}//ll memo[100010];//ll next[100010];//ll dm[100010];//int f[100010];//ll rec(int x) {//// if (~memo[x]) return memo[x];// if (x == n) {// dm[n] = 1;// return 1;// }// ll *res = &memo[x];// *res = 0;// set<int> st;// st.insert(f[x]);// for (int i = x + 1; i <= n; i++)// {// if (~memo[i]) {// *res += memo[i] + 1;// *res %= INF;// break;// }//// *res += rec(i);// *res %= INF;// if (st.find(f[i]) != st.end()) {break; }// st.insert(f[i]);// }//// return *res;//}#define bit(x,v) ((ll)x << v)class BIT {static const int MAX_N = 200010;public:BIT() { memset(bit, 0, sizeof(bit)); }int bit[MAX_N + 1], n;int sum(int i) {int s = 0;while (i > 0){s += bit[i];i -= i & -i;}return s;}void add(int i, int x) {while (i <= n){bit[i] += x;i += i & -i;}}void clear() {memset(bit, 0, sizeof(bit));}int a[MAX_N];void bable_swap_count() {ll ans = 0;for (size_t j = 0; j < n; j++){ans += j - sum(a[j]);add(a[j], 1);}printf("%lld\n", ans);}int search(int s, int x) {ll half = (s + x) / 2;ll sh = sum(x);ll sl = sum(half);ll st = sum(s);if (sh - sl == 0) {return x;}if (sh - sl < x - half) {return search(half, x);}if (sl - st == 0) {return half;}if (sl - st < half - s) {return search(s, half);}return -1;}int lankSearch(int lank) {return lankSearch(lank, 0, MAX_N);}int lankSearch(int lank,int s,int t) {ll half = (s + t) / 2;ll v = sum(half);ll v1 = sum(t);ll v2 = sum(s);if (lank == 1) {if (s + 1 >= t) return t;else if (v - v2 > 0) {return lankSearch(lank, s, half);}else return lankSearch(lank, half, t);}if ((v - v2) < lank) {return lankSearch(lank - (v- v2),half,t);}if ((v - v2) >= lank) {return lankSearch(lank, s, half);}return -1;}};bool ch(vector<string> tb, int x, int y) {try {for (int i = 0; i < 8; i++){if (tb[x][i] == 'Q') return false;if (tb[i][y] == 'Q') return false;}int ty = y;for (int i = x; i < 8; i++){if (tb[i][ty] == 'Q') return false;ty++;if (ty == 8) break;}ty = y;for (int i = x; i < 8; i++){if (tb[i][ty] == 'Q') return false;ty--;if (ty == -1) break;}ty = y;for (int i = x; i >= 0; i--){if (tb[i][ty] == 'Q') return false;ty++;if (ty == 8) break;}ty = y;for (int i = x; i >= 0; i--){if (tb[i][ty] == 'Q') return false;ty--;if (ty == -1) break;}}catch (int v) {cout << endl;}return true;}bool use[8];vector<string> constra(vector<string> tb, vector<int> p) {vector<string> r(tb.begin(),tb.end());int pi = 0;for (size_t i = 0; i < 8; i++){if (use[i]) continue;if (!ch(r, i, p[pi])) return {};r[i][p[pi]] = 'Q';pi++;}return r;}string tb[510];int h, w;bool fil(int x, int y) {queue<pii> q;q.push(make_pair(x, y));while (!q.empty()){auto p = q.front();q.pop();for (size_t i = 0; i < 4; i++){int tx = p.first + dx[i];int ty = p.second + dy[i];if (tx < 0 || ty < 0 || tx >= h || ty >= w) {continue;}if (tb[tx][ty] == '0') continue;if (tb[tx][ty] == '1') continue;if (tb[tx][ty] == '#') {tb[tx][ty] = '1';continue;}tb[tx][ty] = '0';q.push(make_pair(tx, ty));}}return false;}vector<pii> es[110];ll p(ll i, ll j, ll l) {return (i / 2) * 2 + (j / 2) *2 + (l / 2) * 2;}ll cal1(ll i, ll j, ll l) {ll res = 0;if (i > 0 && j > 0 && l > 0) {i--;j--;l--;res += 3;}return res + p(i,j,l);}ll cal2(ll i, ll j, ll l) {ll res = 0;if (i > 1 && j > 1 && l > 1) {i -= 2;j -= 2;l -= 2;res += 6;}return res + p(i, j, l);}ll m;map<pair<string, string>, ll> createmp(string s) {map<pair<string, string>, ll> m1;for (size_t i = 0; i < (1 << n); i++){int ti = i;int p[20];memset(p, 0, sizeof(p));int v = 0;while (ti > 0){if (ti & 1) {p[v] = true;}ti >>= 1;v++;}string s1 = "";string s2 = "";for (size_t i = 0; i < n; i++){if (p[i]) {s1 += s[i];}else {s2 += s[i];}}m1[make_pair(s1, s2)]++;}return m1;}void solv() {ll a[6];ll ma = 0;for (size_t i = 0; i < 5; i++){cin >> a[i];ma = max(ma,a[i]);}reverse(a, a + 5);ll fib[1100];ll f1= 1;ll f2 = 1;int fi = 0;while (f1 <= ma){ll f3 = f1 + f2;fib[fi++] = f1;f1 = f2;f2 = f3;}ll p[6];memset(p, -1, sizeof(p));for (size_t i = 0; i < fi; i++){for (size_t j = 0; j < 5; j++){if (p[j + 1] == -1 && fib[i] == a[j]) {p[j + 1] = i;break;}}}int res = 0;int se = 0;for (size_t i = 1; i <= 5; i++){if ((p[i] - 1 == p[i - 1]) || (p[i-1] == -1 && p[i] != -1)|| (p[i - 1] == 0 && p[i] == 2))se++;else {res = max(se, res);se = 0;}}res = max(res, se);cout << res << endl;}int main() {//COMinit();solv();return 0;}