白駿20055号コンベアのロボット
白駿20055号コンベアのロボットスケッチ
問題の説明
の実施の問題のため、私たちは順番に漸進的にそれを解決しなければならない. インデックスを使用すると便利です. 関数を段階的に作成しましょう. 議長
簡単な解答説明
ベルトを実現しました. の手順に従って関数を作成し、逐次漸進します. 題の説明とコードだけが長くて簡単です. コード#コード#
問題の説明
実施問題なので説明が長いので探しています.😏
問題を見る考え
簡単な解答説明
DEXで
コード#コード# #include <iostream>
#include <deque>
using namespace std;
int N, K;
struct strt{
bool robot;
int cnt;
};
deque<strt> dq;
void getInput(){
cin >> N >> K;
for(int i=0; i<2*N; ++i){
int temp; cin >> temp;
dq.push_back({false, temp});
}
}
void moveBelt(){
strt back = dq.back(); dq.pop_back();
dq.push_front(back);
}
void moveRobot(int n){
if(!dq[n].robot) return;
if(n == N-1){
dq[n].robot = false;
return;
}
if(dq[n+1].robot){
return;
}
if(dq[n+1].cnt >= 1 && dq[n].robot){
if(n+1 == N-1) {
dq[n].robot = false;
dq[n+1].robot = false;
dq[n+1].cnt -= 1;
return;
}
dq[n].robot = false;
dq[n+1].robot = true;
dq[n+1].cnt -= 1;
return;
}
}
void putRobot(){
if(dq[0].cnt >= 1){
dq[0].robot = true;
dq[0].cnt -= 1;
}
}
int checkCnt(){
int cnt = 0;
for(int i=0; i<2*N; ++i){
if(dq[i].cnt <= 0){
++cnt;
}
}
return cnt;
}
int solution(){
getInput();
int cnt = checkCnt();
int ret = 0;
while(cnt < K){
++ret;
moveBelt(); // step 1
if(dq[N-1].robot){ // robot go down
dq[N-1].robot = false;
}
for(int i=N-2; i>=0; --i){ // step 2
moveRobot(i);
}
putRobot(); // step 3
cnt = checkCnt();
}
return ret;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout << solution();
return 0;
}
Reference
この問題について(白駿20055号コンベアのロボット), 我々は、より多くの情報をここで見つけました
https://velog.io/@kkoma2623/백준-20055번-컨베이어-벨트-위의-로봇
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <deque>
using namespace std;
int N, K;
struct strt{
bool robot;
int cnt;
};
deque<strt> dq;
void getInput(){
cin >> N >> K;
for(int i=0; i<2*N; ++i){
int temp; cin >> temp;
dq.push_back({false, temp});
}
}
void moveBelt(){
strt back = dq.back(); dq.pop_back();
dq.push_front(back);
}
void moveRobot(int n){
if(!dq[n].robot) return;
if(n == N-1){
dq[n].robot = false;
return;
}
if(dq[n+1].robot){
return;
}
if(dq[n+1].cnt >= 1 && dq[n].robot){
if(n+1 == N-1) {
dq[n].robot = false;
dq[n+1].robot = false;
dq[n+1].cnt -= 1;
return;
}
dq[n].robot = false;
dq[n+1].robot = true;
dq[n+1].cnt -= 1;
return;
}
}
void putRobot(){
if(dq[0].cnt >= 1){
dq[0].robot = true;
dq[0].cnt -= 1;
}
}
int checkCnt(){
int cnt = 0;
for(int i=0; i<2*N; ++i){
if(dq[i].cnt <= 0){
++cnt;
}
}
return cnt;
}
int solution(){
getInput();
int cnt = checkCnt();
int ret = 0;
while(cnt < K){
++ret;
moveBelt(); // step 1
if(dq[N-1].robot){ // robot go down
dq[N-1].robot = false;
}
for(int i=N-2; i>=0; --i){ // step 2
moveRobot(i);
}
putRobot(); // step 3
cnt = checkCnt();
}
return ret;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout << solution();
return 0;
}
Reference
この問題について(白駿20055号コンベアのロボット), 我々は、より多くの情報をここで見つけました https://velog.io/@kkoma2623/백준-20055번-컨베이어-벨트-위의-로봇テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol