結果
問題 | No.2451 Redistribute Integers |
ユーザー |
|
提出日時 | 2023-09-20 00:58:08 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 219 ms / 2,000 ms |
コード長 | 4,749 bytes |
コンパイル時間 | 1,819 ms |
コンパイル使用メモリ | 177,436 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-11 11:08:25 |
合計ジャッジ時間 | 4,703 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#include <bits/stdc++.h>#include <assert.h>//#include <atcoder/all>using namespace std;//using namespace atcoder;#define rep(i,a,n) for (int i = a; i < (n); i++)//#define REP(m) for (int i = 0; i < (m); i++)#define all(x) (x).begin(),(x).end()using ll = long long;using P = pair<int,int>;using Graph = vector<vector<int>>;using Grid = vector<vector<char>>;int mod = 998244353;int INF = 1001001001;//cout << fixed << setprecision(15);using vi = vector<int>;using vc = vector<char>;using vs = vector<string>;using vll = vector<ll>;using pii = pair<int, int>;using pci = pair<char,int>;using pic = pair<int,char>;using pll = pair<ll, ll>;using mii = map<int,int>;using mci = map<char,int>;int Flag=0;//デフォルトでNoがでるvoid yn(int Flag){if(Flag==1){cout<<"Yes"<<endl;}else if(Flag==0){cout<<"No"<<endl;}else{cout<<-1<<endl;}}//cerrGridvoid cerrGrid(vector<vector<char>> &V){int n=V.size();rep(i,0,n){for(auto x:V[i]){cerr<<x<<" ";}cerr<<endl;}cerr<<endl;}//cerrGraphvoid cerrGraph(vector<vector<int>> &G){int n=G.size();rep(i,0,n){for(auto& vertex:G[i]){cerr<<vertex<<" ";}cerr<<endl;}}//cerrIntVecvoid cerrIntVec(vector<int> &V){for(auto& v:V){cerr<<v<<endl;}}//UnionFindclass UnionFind{public:UnionFind() = default;/// @brief Union-Find 木を構築します。/// @param n 要素数explicit UnionFind(size_t n): m_parentsOrSize(n, -1) {}/// @brief 頂点 i の root のインデックスを返します。/// @param i 調べる頂点のインデックス/// @return 頂点 i の root のインデックスint find(int i){if (m_parentsOrSize[i] < 0){return i;}// 経路圧縮return (m_parentsOrSize[i] = find(m_parentsOrSize[i]));}/// @brief a のグループと b のグループを統合します。/// @param a 一方のインデックス/// @param b 他方のインデックスvoid merge(int a, int b){a = find(a);b = find(b);if (a != b){// union by size (小さいほうが子になる)if (-m_parentsOrSize[a] < -m_parentsOrSize[b]){std::swap(a, b);}m_parentsOrSize[a] += m_parentsOrSize[b];m_parentsOrSize[b] = a;}}/// @brief a と b が同じグループに属すかを返します。/// @param a 一方のインデックス/// @param b 他方のインデックス/// @return a と b が同じグループに属す場合 true, それ以外の場合は falsebool connected(int a, int b){return (find(a) == find(b));}/// @brief i が属するグループの要素数を返します。/// @param i インデックス/// @return i が属するグループの要素数int size(int i){return -m_parentsOrSize[find(i)];}private:// m_parentsOrSize[i] は i の 親,// ただし root の場合は (-1 * そのグループに属する要素数)std::vector<int> m_parentsOrSize;};//通常dfsvoid dfs(int now, vector<int> &seen, Graph &G){seen[now]=true;for(auto next:G[now]){if(seen[next]) continue;dfs(next, seen,G);}}//サイクル検出dfsbool dfs(int now, vector<bool> &seen, vector<bool> &finished, Graph &G){bool res=1;seen[now]=1;for(auto nx:G[now]){if(seen[nx] && !finished[nx]){res=0;return res;}else if(seen[nx]){continue;}res&=dfs(nx, seen, finished, G);}finished[now]=1;return res;}//典型グラフ問題main関数/*int main(){int N,M; cin>>N>>M;Graph G(N);rep(i,0,M){int A,B; cin>>A>>B;A--; B--;G[A].push_back(B);G[B].push_back(A);}}*///2進数にするstring to_2(int K){string res;while(K>0){if(K%2==1){res+='1';}else{res+='0';}K/=2;}reverse(all(res));return res;}//N未満の素数を全列挙する関数vector<ll> Eratosthenes( const int N ){//is_prime[i]がfalse->iは素数vector<int> is_prime(N+1);vector<ll> res;rep(i,2,N+1){if(is_prime[i]==false){for(int j=2*i; j<N+1; j+=i){is_prime[j]=true;}res.push_back(i);}}return res;}//mapの全要素を出力するvoid cerrMapIntInt(map<int,int> mp){auto begin = mp.begin(), end = mp.end();for (auto iter = begin; iter != end; iter++) {// first: key, second: valuecout << "key = " << iter->first << "\n";cout << "value = " << iter->second << "\n";}}int main(){int N; cin>>N;vector<int> A(N);rep(i,0,N) cin>>A[i];rep(i,0,N){A[i]+=1e9+2;}rep(i,0,N-1){if(A[i+1]%N!=A[i]%N){yn(0);return 0;}}yn(1);}