vectorアプリケーション-ccf 1712-2周囲報数
問題の説明
1からn番の子供は時計回りに1周座って、輪を囲んで数えます.1つの子供新聞の数がkの倍数またはその末数(すなわち数のビット)がkである場合、その子供は淘汰される.
子供が一人しか残っていないとき、その子供は勝った.
例えば、n=5、k=2の場合:1番の子供は1を報告します.2番の子供は2で淘汰された.3番の子供は3を数えます;4番の子供は4で淘汰された.5番の子供は5を数えます;1番の子供は6で淘汰された.3番の子供は7を数えます;5番の子供は8で淘汰された.3番の子供が勝った.
nとkを与えて、最後に勝った子供の番号はいくらですか?
入力フォーマット
2つの整数nとkを含む1行を入力し、タイトルで説明したように意味します.
出力フォーマット
勝った子供の番号を表す整数を含む行を出力します.
サンプル入力
5 2
サンプル出力
3
サンプル入力
7 3
サンプル出力
4
データ規模と約定
すべての評価例について、1≦n≦1000、1≦k≦9であった.
ぶんせき
vectorと反復器を適用します.
最初は、反復器は
サイクル中、カウントが淘汰値に報告されると、その要素はvector:
code
1からn番の子供は時計回りに1周座って、輪を囲んで数えます.1つの子供新聞の数がkの倍数またはその末数(すなわち数のビット)がkである場合、その子供は淘汰される.
子供が一人しか残っていないとき、その子供は勝った.
例えば、n=5、k=2の場合:1番の子供は1を報告します.2番の子供は2で淘汰された.3番の子供は3を数えます;4番の子供は4で淘汰された.5番の子供は5を数えます;1番の子供は6で淘汰された.3番の子供は7を数えます;5番の子供は8で淘汰された.3番の子供が勝った.
nとkを与えて、最後に勝った子供の番号はいくらですか?
入力フォーマット
2つの整数nとkを含む1行を入力し、タイトルで説明したように意味します.
出力フォーマット
勝った子供の番号を表す整数を含む行を出力します.
サンプル入力
5 2
サンプル出力
3
サンプル入力
7 3
サンプル出力
4
データ規模と約定
すべての評価例について、1≦n≦1000、1≦k≦9であった.
ぶんせき
vectorと反復器を適用します.
vectorv;
vector::iterator it;
最初は、反復器は
v.begin()
を指し、反復がv.end()
になると、v.begin()
を再び指し、それによってサイクルを達成する.v.size()==1
でサイクルを終了する.サイクル中、カウントが淘汰値に報告されると、その要素はvector:
v.erase(it);
から直接移動されます.code
#include
using namespace std;
int a[1005]={0}; //0 ,1
int main(){
int n,k;
cin>>n>>k;
vectorv;
vector::iterator it;
//
for(int i=1;i<=n;i++){
v.push_back(i);
}
//
int count=0;//
for(it=v.begin();v.size()!=1;){ //vector
// ,
if(it==v.end())
it=v.begin();
count++;
if(count%10==k || count%k==0){ // k k
//cout<