chacoderのブログ

競技プログラミングそのほか

ABC196参戦記

f:id:chacoder:20210322210739p:plain

はじめに

2021年3月20日21:00-22:40に開催されたABC196に参加しました。
結果は44分59秒ABC3完で3695位/8630人中、パフォーマンス731でレーティングは前回907から-17の890となりました。

A問題

A問題は簡単な算数問題。
a<=x<=b , c<=y<=d となるようx,yを選ぶときx-yの最大値を求めます。
xがより大きく、yがより小さくなるようにとればいいのでb-cを出力します。
間違えやすい問題なので丁寧にサンプルを試して2:10で提出。まずまず。

B問題

整数または小数が与えられ小数点以下を切り捨てて出力する問題です。
入力の上限が10^100と大きいので文字列で受けて小数点がでるまでそのまま出力する方針でAC。
2:44で提出。通算4:54とここまでもいい感じ。

#include <bits/stdc++.h>
using namespace std;

int main(){
  string s;
  cin>>s;
  int len=s.size();
  int flag=-1;
  rep(i,len){
    if(s.at(i)=='.'){
      cout<<endl;
      return 0;
    }
    cout<<s.at(i);
  }
  cout<<endl;
  return 0;
}

C問題

今回の失敗はC問題でした。
問題は10^12以下の数nが入力され、n以下の数で①偶数桁 かつ ②前半と後半が文字列として等しい ものを出力する問題です。この②を回文になっているものと誤読して、だいぶ時間を溶かしてしまいました。細かいバグとりにも手間取って提出に痛恨の40分05秒。通算44分59秒となりだいぶ遅れました。

提出コードに無駄にひっくり返す関数を書いた跡が残ってます。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,n) for(int i=0;i<n;i++)
typedef pair<int,int>P;

int rev(ll x){
  string s=to_string(x);
  //cout<<s<<endl;
  reverse(s.begin(),s.end());
  //cout<<s<<endl;
  ll r=0;
  int n=s.length();
  rep(i,n){
    r*=10;
    r+=s.at(i)-'0';
  }
  //cout<<r<<endl;
  return r;
} 

int main(){
  vector<ll>vec;
  ll m;
  for(int i=1;i<=999999;i++){
    //if(i%10==0) continue;
    ll j=i;
    m=10;
    if(i>=10) m=100;
    if(i>=100) m=1000;
    if(i>=1000) m=10000;
    if(i>=10000) m=100000;
    if(i>=100000) m=1000000;
    vec.push_back(i*m+j);
  }
  sort(vec.begin(),vec.end());
  ll n;
  cin>>n;
  if(n<=10){
    cout<<0<<endl;
    return 0;
  }
  //cout<<vec.size()<<endl;
  rep(i,vec.size()){
    if(n<vec[i]){
      cout<<i<<endl;
      return 0;
    }
  }
  cout<<vec.size()<<endl;
  return 0;
}

D問題

解けませんでした。
翌日解説AC。
次は同じようなのがきたら解けると思います。

E問題

時間中にトライしましたが解ききれませんでした。
解説もまだしっかり理解できておらず、後日復習します。