beet's soil

競プロのことなど

AtCoder Regular Contest 068

コンテスト中にコンテスト

【C - X: Yet Another Die Game】

65656565と繰り返すのがいいことは自明なのでやる。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  ll x;
  cin>>x;
  ll ans=x/11*2;
  x=x%11;
  if(x){
    ans++;
    if(x>=7) ans++;
  }
  cout<<ans<<endl;
  return 0;
}
【D - Card Eater】

ソートしてやるだけなのにWAが生えたので泣いた。
あるカードを基準にして
max(それより小さい取り除くカードの数,それより大きい取り除くカードの数)*2
の最小値を求めればいい。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  int n;
  cin>>n;
  vector<int> v(n);
  for(int i=0;i<n;i++) cin>>v[i];
  sort(v.begin(),v.end());
  //for(int i=0;i<n;i++) cout<<v[i]<<" \n"[i==n-1];
  int cnt=0;
  for(int i=0;i<n;i++){
    while(i+1<n&&v[i]==v[i+1]){
      i++;
      cnt++;
    }
  }
  int tmp=0,ans=0;
  for(int i=0;i<n;i++){
    if(!(i<cnt-tmp||n-1-i<tmp)) ans=max(ans,n-2*max(tmp,cnt-tmp));
    while(i+1<n&&v[i]==v[i+1]){
      i++;
      tmp++;
      //cout<<tmp<<" "<<cnt-tmp<<endl;
      if(i<cnt-tmp||n-1-i<tmp) continue;
      ans=max(ans,n-2*max(tmp,cnt-tmp));
    }
    if(!(i<cnt-tmp||n-1-i<tmp)) ans=max(ans,n-2*max(tmp,cnt-tmp));
  }
  cout<<ans<<endl;
  return 0;
} 
【全体】

198th 1911 -> 1900 (-11)

Dの2WAが最高にもったいない
Eはあと少しだったような気がするけど本番中に解けないとなあ