Discommunication

日記帳

ABC042 B-C

All Submissions - AtCoder Beginner Contest 042

  • B 文字列大好きいろはちゃんイージー
#include <bits/stdc++.h>
using namespace std;

int main(){
    vector<string> S(100);
    int N,L;
    cin >> N >> L;
    for(int i=0;i<N;i++){
        cin >> S[i];
    }

    //bubble sort
    string tmp;
    for(int i=0;i<N;i++){
        for(int k=0;k<N-1-i;k++){
            if(S[k]>=S[k+1]){
                tmp = S[k+1];
                S[k+1] = S[k];
                S[k] = tmp;
            }
        }
    }
    for(int i=0;i<N;i++){
        cout << S[i];
    }
    return 0;
}

・雑感
 sortで配列する方法がわからなかったので仕方なく自分で書いた クイックソートの書き方忘れたからbubble
 quick sortって直感的じゃないからコピペじゃないと書けない そもそもソートの種類で時間内に終わるか終わらないか分かれることって稀では?


  • C こだわり者いろはちゃん
#include <bits/stdc++.h>
using namespace std;

int main(){
    int N,K;
    cin >> N >> K;
    vector<int> D;
    int tmp;
    for(int i=0;i<K;i++){
        cin >> tmp;
        D.push_back(tmp);
    }
    vector<int> use;
    int flag;
    for(int i=0;i<10;i++){
        flag = 0;
        for(int k=0;k<D.size();k++){
            if(i == D[k]){
                flag++;
                break;
            }
        }
        if(flag == 0) use.push_back(i);
    }
    int keta=1;
    tmp = N;
    while(tmp > 9){
        tmp /= 10;
        keta ++;
    }

    string s = to_string(N);
    string answer = "";
    for(int i=0;i<s.size();i++){
        tmp = s[i] - '0';
        flag = 0;
        for(int j=0;j<use.size();j++){
            if(tmp == use[j]){
                answer += use[j] + '0';
                flag ++;
                break;
            }else if(tmp < use[j]){
                answer += use[j] + '0';
                for(int k=0;k<s.size()-i-1;k++) answer += use[0] + '0';
                //cout << "a" << endl;
                cout << answer << endl;
                return 0;
            }
        }

        if(flag == 0){
            if(use[0] == 0){
                cout << use[1];
                for(int j=0;j<keta;j++) cout << use[0];
            }else{
                for(int j=0;j<keta+1;j++)cout << use[0];
            }
            cout << endl;
            return 0;
        }
    }
    cout << answer << endl;
    return 0;
}

・雑感
 コードがガチで汚い
 使える数字をvector useに入れて、Nを上のケタから順に見ていく。
 if(N=use[i]となるiが存在) 次のケタを見る
 else if(N<use[i]となるiが存在) use[i]を出力した後、残りをuse[0]で埋める
 else Nより1ケタ多い値を出力 0が存在するかしないかで場合分け

 もうちょい綺麗に書けるな・・・