beet's soil

競プロのことなど

Codeforces Round #397

17:05からって珍しい

【A. Neverending competitions】

N%2 他の入力はいらない。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  int n;
  string home;
  cin>>n>>home;
  string s[n];
  for(int i=0;i<n;i++) cin>>s[i];
  cout<<(n%2?"contest":"home")<<endl;
  return 0;
}
【B. Code obfuscation】

abcd...の順番になっているか調べる。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  bool f=1;
  string s;
  cin>>s;
  char c='a'-1;
  for(int i=0;i<(int)s.size();i++){
    if(s[i]<=c) continue;
    if(s[i]==c+1) c=s[i];
    else f=0;
  }
  cout<<(f?"YES":"NO")<<endl;
  return 0;
}
【C. Table Tennis Game 2】

片方が一回も勝てない時だけ考慮すればいい。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  ll k,a,b,ans=0;
  cin>>k>>a>>b;
  ans+=a/k;
  ans+=b/k;
  if(a>k*ans||b>k*ans) cout<<-1<<endl;
  else cout<<ans<<endl;
  return 0;
}
【D. Artsem and Saunders】

g(f(x))=g(x) に気付けばやるだけ。
g[i]=ma[f[i]];をg[i]=ma[i];にしてWA(かなしい。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  int n;
  cin>>n;
  int f[n];
  for(int i=0;i<n;i++) cin>>f[i];
  map<int,int> ma;
  map<int,vector<int> > G;
  int m;
  for(int i=0;i<n;i++){
    f[i]--;
    m=ma.size();
    if(ma.count(f[i])) m=ma[f[i]];
    ma[f[i]]=m;
    G[m].push_back(i);
  }
  m=ma.size();
  int g[n],h[m];
  memset(h,-1,sizeof(h));
  for(int i=0;i<n;i++) g[i]=ma[f[i]];
  for(int i=0;i<n;i++) h[g[i]]=f[i];
  bool a=1;
  for(int i=0;i<m;i++) a&=g[h[i]]==i;
  for(int i=0;i<n;i++) a&=h[g[i]]==f[i];
  if(a){
    cout<<m<<endl;
    for(int i=0;i<n;i++) cout<<g[i]+1<<" \n"[i==n-1];
    for(int i=0;i<m;i++) cout<<h[i]+1<<" \n"[i==m-1];
  }else cout<<-1<<endl;
  return 0;
}
【全体】

oooxx- 2661point
1038th 1714 -> 1707 (-7)
DE落ちたのつらい。
pretest弱いのなんとかして。