LoginSignup
0
0

ABC061 の問題を解いてみました

Posted at

A問題

言われたとおりに実装しましょう。

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

signed main(){
  int a, b, c;
  cin >> a >> b >> c;
  if(c >= a  && c <= b){
    cout << "Yes" << endl;
  }
  else{
    cout << "No" << endl; 
  }
}

B問題

それぞれの数字の出現回数を記録しておけばよいです。


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

signed main(){
  int n, m;
  cin >> n >> m;
  vector<int> ans(n + 1, 0);
  //出現回数を数える配列を用意
  for(int i = 0; i < m; i++){
    int a, b;
    cin >> a >> b;
    ans[a]++;
    ans[b]++;
    //出現回数をカウント
  }
  
  //結果を出力
  for(int i = 1; i <= n; i++){
    cout << ans[i] << endl;
  }
}

C問題

制約を確認すると、愚直に整数を挿入していては、TLEになってしまいます。

なので、なんという整数がいくつあるかということを記録しておきます。
そして、記録した配列をソートします。

そうすると、ある整数n以下の整数がいくつあるかというのを高速に求めることができます。
$K$以上か$K$以下の境目がこの問題の答えになります。

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

signed main(){
  long long n, k;
  cin >> n >> k;
  vector<pair<long long, long long> > vec(n);
  
  for(int i = 0; i < n; i++){
    cin >> vec[i].first >> vec[i].second;
    //記録しておく
  }
  
  sort(vec.begin(), vec.end());
  //ソートする
  
  long long a = 0; //ある整数以下の整数の数を記録する変数
  for(int i = 0; i < n; i++){
    a += vec[i].second;
    if(k <= a){ //境目を探す
      cout << vec[i].first << endl;
      return 0;
    }
  }
}

D問題

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0