結果
問題 | No.805 UMG |
ユーザー | Micc |
提出日時 | 2019-03-22 21:43:02 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 20 ms / 2,000 ms |
コード長 | 2,897 bytes |
コンパイル時間 | 1,336 ms |
コンパイル使用メモリ | 161,132 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-04-29 10:32:23 |
合計ジャッジ時間 | 2,205 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,812 KB |
testcase_01 | AC | 1 ms
6,940 KB |
testcase_02 | AC | 1 ms
6,940 KB |
testcase_03 | AC | 1 ms
6,940 KB |
testcase_04 | AC | 1 ms
6,940 KB |
testcase_05 | AC | 1 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,944 KB |
testcase_08 | AC | 1 ms
6,944 KB |
testcase_09 | AC | 1 ms
6,944 KB |
testcase_10 | AC | 1 ms
6,940 KB |
testcase_11 | AC | 1 ms
6,940 KB |
testcase_12 | AC | 2 ms
6,940 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,940 KB |
testcase_15 | AC | 2 ms
6,940 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 2 ms
6,944 KB |
testcase_18 | AC | 2 ms
6,940 KB |
testcase_19 | AC | 2 ms
6,944 KB |
testcase_20 | AC | 3 ms
6,940 KB |
testcase_21 | AC | 2 ms
6,944 KB |
testcase_22 | AC | 2 ms
6,944 KB |
testcase_23 | AC | 20 ms
6,940 KB |
testcase_24 | AC | 20 ms
6,940 KB |
testcase_25 | AC | 20 ms
6,944 KB |
testcase_26 | AC | 20 ms
6,940 KB |
testcase_27 | AC | 20 ms
6,944 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(i, n) for (ll i = 0; i < n; i++) #define FOR(i, a, b) for (ll i = a; i < b; i++) #define is(a, b) a == b #define len(v) ll(v.size()) const ll INF = 1LL << 58; class UnionFind{ public: vector<int> par;//親の番号 vector<int> rank;//木の深さ UnionFind(int n){//全ての要素に対して自身が根となるように初期化, 木の深さは0になる rep(i,n){ par.push_back(i); rank.push_back(0); } } int find(int x) {//木の根を求める if(par[x]==x){ return x; }else{ return par[x]=find(par[x]); } } void unite(int x,int y){//xとyの属する集合を併合 x=find(x); y=find(y); if(x==y) return; if(rank[x]<rank[y]){//木の深さが小さい方を大きい方へ繋げる par[x]=y; }else{ par[y]=x; if(rank[x]==rank[y]) rank[x]++; } } bool same(int x,int y){//xとyが同じ集合に属するか否か return find(x)==find(y); } }; //x以下の要素への最小index, ソートしてから使ってね template <class T> int former(const vector<T> &v, T x){ return upper_bound(v.begin(), v.end(), x) - v.begin() - 1; } //x以上の要素への最小index template <class T> int latter(const vector<T> &v, T x){ return lower_bound(v.begin(), v.end(), x) - v.begin(); } //vector書き出し template <class T> void cout_vec(const vector<T> &vec1){ rep(i,len(vec1)){ cout<<vec1[i]<<' '; } cout<<'\n'; } //nCk template <class T> T comb(T n,T k){ T ans=1; FOR(i,n-k+1,n+1){ ans*=i; } FOR(i,1,k+1){ ans/=i; } return ans; } //a,bの最大公約数 template <class T> T gcd(T a,T b){ if (b == 0) return a; else return gcd(b, a % b); } //素因数分解 template <class T> map<T,T> prime_factor(T x){ map<T,T> ans; for(T i=2;i*i<=x;i++){ while(x%i==0){ x/=i; ans[i]++; } } if (x!=1){ ans[x]=1; } return ans; } //約数列挙 template <class T> vector<T> divisor(T x){ vector<T> res; for(T i=1;i*i<=x;i++){ if(x%i==0){ res.push_back(i); if(i!=x/i){ res.push_back(x/i); } } } return res; } //素数判定 template <class T> bool is_prime(T x){ for(T i=2;i*i<=x;i++){ if(x%i==0){ return false; } } return x!=1; } int main(){ cin.tie(0); ios::sync_with_stdio(false); ll n; cin>>n; string s; cin>>s; ll ans=0; rep(i,n-2){ FOR(j,i+1,n-1){ int k=2*j-i; if(s[i]=='U' && s[j]=='M' && s[k]=='G'){ ans++; } } } cout<<ans<<endl; }