1. 程式人生 > 資訊 >訊息稱蘋果將採用更薄的外圍晶片,iPhone 13/Pro 系列電池有望更大

訊息稱蘋果將採用更薄的外圍晶片,iPhone 13/Pro 系列電池有望更大

圓桌問題

Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 15263Accepted Submission(s): 5166

Problem Description 圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第一個人開始數數,數到第m個人,則立即處死該人;然後從被處死的人之後開始數數,再將數到的第m個人處死……依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。 Input 多組資料,每組資料輸入:好人和壞人的人數n(<=32767)、步長m(<=32767); Output 對於每一組資料,輸出2n個大寫字母,‘G’表示好人,‘B’表示壞人,50個字母為一行,不允許出現空白字元。相鄰資料間留有一空行。 Sample Input 2 3 2 4 Sample Output GBBG BGGB
#include <iostream>
#include 
<vector> using namespace std; int main() { cin.sync_with_stdio(false); cin.tie(nullptr); vector < int > table; int n,m; while(cin>>n>>m){ table.clear(); //清空 for(int i=0; i<2*n; i++) table.push_back(i); //初始化 int pos = 0; //
記錄當前位置 for(int i=0; i<n; i++){ //趕走n個人 pos = (pos+m-1) % table.size(); //圓桌是個環,取餘處理 table.erase(table.begin() + pos); //趕走壞人,table人數減一 } int j = 0; for(int i=0; i<2*n; i++){ //列印預先安排的座位 if(!(i%50) && i) //實現50個字母換一行 cout<<endl;
if(j<table.size() && i==table[j]){ //table中留下的都是好人 j++; cout<<"G"; }else cout<<"B"; } cout<<endl<<endl; //留一個空行 } return 0; }