軍隊における符号化アルゴリズム17


ほとんどコメントを書くたびに久しぶりにアップしたと言います今回も久しぶりにアップしました
その一つ目の理由は、少し前に陸軍創業が大会決勝戦に進出した後、何度も出場したため、うまくいかなかったことであり、二つ目の理由は最近の訓練が多すぎることだ.四肢軟背に制限があるため、コードが間違っています.そして、3つ目は、点灯で問題を解決しているのですが、うまく解けないのでアップロードできるものは何もありません.
そして今日私は一つのことを理解しました.うまくいかなかったらそのまま授業を受けようかと悩んでいます!進度が遅すぎてだめ...
うん.今日の問題はお姫様を救うことですか?これは問題で、説明が難しいので、写真を添付しました.

多分こんな問題で、最初は運行時が心配でした.一次元配列のベクトルを作ることは分かっていますが、ずっと回転して、しかもNの範囲が1000に達する可能性があるので、単純に複文を回してはいけないと思っているので、別の方向に近づけるのですが、単純に近づけるのは正しいです.
最初から配列を0にリセットして、1つずつ計算してKの分割数を1にすればいいです.
これは想像以上に厄介で簡単な問題です.
コードは次のとおりです.
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
    
    int N, K;
    
    cin>>N>>K;
    //N은 8 K는 3
    int count = N; //벡터안의 실질적 원소 개수
    int temp=1; //세주려고 하는거
    int check_num = 1;
    
    vector<int> prince(N+1);
    
    while(count!=1){
        if(check_num==N+1){
            check_num = 1;
        }
        if(prince[check_num]==0){
            if(temp%K==0){
                prince[check_num]++;
                //cout<<"아웃된 왕자: "<<check_num<<endl;
                count--;
                temp = 1;
                check_num++;
            }
            else{
                temp++;
                check_num++;
            }
        }
        else{
            check_num++;
           
        }
    }
    
    for(int i=1; i<N+1; i++){
        if(prince[i]==0){
            cout<<i;
            break;
        }
    }
}