Entries

スポンサーサイト (この記事を編集する[管理者用])

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1968-1d980e7f
この記事にトラックバックする(FC2ブログユーザー)

Beta Round #71 A問題 - Bus Game (この記事を編集する[管理者用])

Source

Codeforces Beta Round #71 A問題 (500pt)
Problem description
Beta Round #71の自分の参加記録

問題概要

x枚 (10^6以下) の100円玉とy枚 (10^6以下) の10円玉がある.
2人で順番に220円ずつ取っていく.
ただし,先手は100円玉ができるだけ多くなるように取り,後手は10円玉ができるだけ多くなるように取る.
最後に220円取れるのは先手と後手どちらかを答える問題.

解法

シミュレーションやるだけ.

C言語のスパゲッティなコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int is_can(int *x,int *y,int mode){
  int res = 220;
  if(mode==0){
    while(*x > 0 && res >= 100) (*x)--, res -= 100;
    while(*y > 0 && res >= 10 ) (*y)--, res -= 10;
  } else {
    while(*y >= 12 && res >= 100) (*y)-=10, res-=100;
    while(*x >=  1 && res >= 100) (*x)-= 1, res-=100;
    while(*y >=  1 && res >= 10 ) (*y)-= 1, res-=10;
  }
  if(res==0) return 1; return 0;
}

int main(){
  int i,j,k,l,m,n;
  int x,y,win;

  while(scanf("%d%d",&x,&y)==2){
    for(;;){
      if(!is_can(&x,&y,0)){ win=0; break; }
      if(!is_can(&x,&y,1)){ win=1; break; }
    }

    if(win) puts("Ciel"); else puts("Hanako");
  }


  return 0;
}

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1968-1d980e7f
この記事にトラックバックする(FC2ブログユーザー)

Appendix

Recent Articles

ブログ内検索

Ads


(プライバシーポリシー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。