LoginSignup
0
0

More than 3 years have passed since last update.

AtCoder 生活 64日目

Posted at

64日目

今回はC問題、D問題1問ずつ解き、とバーチャル参加を2回しました。

問題 難易度 自力で解けた かかった時間
ABC167 C 122分11秒
ABC167 D 164分50秒

スクリーンショット 2020-05-24 13.19.56.png
スクリーンショット 2020-05-24 15.39.29.png

ABC153

A


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

int main(){
    int h,a;
    cin >> h >> a;
    cout << (h+a-1)/a << endl;
}

B


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


int main(){
    int h,m;
    cin >> h >> m;
    rep(i,n){
        int a;
        cin >> a;
        h -= a;
    }
    if(h <= 0) cout << "Yes" << endl;
    else cout << "No" << endl;
}

C


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

int main(){
    ll n,k;
    cin >> n >> k;
    if(n-k <= 0){
        cout << 0 << endl;
        return 0;
    }
    int ans = 0;
    vector<int> h(n);
    rep(i,n) cin >> h[i];
    sort(h.begin(),h.end());
    rep(i,n-k){
        ans += h[i];
    }
    cout << ans << endl;
}

ABC152

A


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

int main(){
    int n,m;
    cin >> n >> m;
    if(n == m) cout << "Yes" << endl;
    else cout << "No" << endl;
}

B


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


int main(){
    int a,b;
    cin >> a >> b;
    int x = min(a,b);
    int y = max(a,b);
    rep(i,y){
        cout << x;
    }
    cout << endl;
}

C


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

int INF = 1e9;

int main(){
    int n;
    cin >> n;
    int m = INF;
    int cnt = 0;
    rep(i,n){
        int a;
        cin >> a;
        if(m > a) m = a;
        else cnt++;
    }
    int ans = n - cnt;
    cout << ans << endl;
}

ABC167_C


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

const int INF = 2e9;

int main(){
    int n,m,x;
    cin >> n >> m >> x;
    vector<vector<int>> a(n,vector<int>(m));
    vector<int> c(n);
    rep(i,n){
        cin >> c[i];
        rep(j,m) cin >> a[i][j];
    }
    int ans = INF;
    rep(s,1<<n){
        int cost = 0;
        vector<int> d(m);
        rep(i,n){
            if(s>>i&1){
                cost += c[i];
                rep(j,m) d[j] += a[i][j];
            }
        }
        bool ok = true;
        rep(j,m) if(d[j] < x) ok = false;
        if(ok) ans = min(ans,cost);
    }
    if(ans == INF) cout << -1 << endl;
    else cout << ans << endl;
}

解くのにかかった時間:122分11秒
感想:bit全探索にまだ慣れてない…

ABC167_D


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

int main(){
    ll n,k;
    cin >> n >> k;
    vector<int> a(n);
    rep(i,n) cin >> a[i];
    vector<int> s;
    vector<int> ord(n+1,-1);
    int c = 1;
    int l = 0;
    int v = 1;
    while(ord[v] == -1){
        ord[v] = s.size();
        s.push_back(v);
        v = a[v-1];
    }
    c = s.size() - ord[v];
    l = ord[v];
    if(k < l) cout << s[k] << endl;
    else {
        k -= l;
        k %= c;
        cout << s[l+k] << endl;
    }
}

解くのにかかった時間:164分50秒
感想:ある程度の形はわかっていたが解ききれなかった

最後に

C,D問題をスムーズに解けるように緑diffの問題にも慣れていきたい

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