寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

アルゴ式(beta版): C++による「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)の解答例

アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。

C++による「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)の解答例

僕が作成、提出したコードは、以下のとおりです。

・問題 1: ランチ

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)の解答例
問題 1: ランチ
https://algo-method.com/tasks/599
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  vector<int> pasta(3),juice(2);
  cin>>pasta[0]>>pasta[1]>>pasta[2];
  cin>>juice[0]>>juice[1];
  sort(pasta.begin(),pasta.end());
  sort(juice.begin(),juice.end());
  cout<<pasta[0]+juice[0]-50<<endl;
  return 0;
}
・問題 2: サッカー

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)の解答例
問題 2: サッカー
https://algo-method.com/tasks/600
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  vector<int> cnt(10001,0);
  int n;
  cin>>n;
  for(int i=0;i<n*(n-1)/2;i++){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    a--;
    b--;
    if(c>d){
      cnt[a]+=3;
    }else if(c<d){
      cnt[b]+=3;
    }else{
      cnt[a]++;
      cnt[b]++;
    }
  }
  vector<int> v;
  for(int i=0;i<n;i++){
    v.push_back(cnt[i]);
  }
  sort(v.begin(),v.end());
  for(int i=0;i<n;i++){
    cout<<n-(upper_bound(v.begin(),v.end(),cnt[i])-v.begin())+1<<endl;
  }
  return 0;
}
・問題 3: 最高のピザ

algo-method.com

/*
C++による「日本情報オリンピック (予選) 過去問」JOI 2011/2012 予選 (前半)の解答例
問題 3: 最高のピザ
https://algo-method.com/tasks/601
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
  ll n;
  cin>>n;
  ll a,b,c;
  cin>>a>>b>>c;
  vector<ll> d(n);
  for(ll i=0;i<n;i++){
    cin>>d[i];
  }
  sort(d.rbegin(),d.rend());
  vector<ll> v;
  for(ll i=0;i<=n;i++){
    ll sum=c;
    for(ll j=0;j<i;j++){
      sum+=d[j];
    }
    v.push_back(sum/(a+i*b));
  }
  sort(v.rbegin(),v.rend());
  cout<<v[0]<<endl;
  return 0;
}

設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com