雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分类思想好题——Codeforces Beta Round #80 div2 D

Posted on 2011-08-08 16:57  huhuuu  阅读(235)  评论(0编辑  收藏  举报

  死亡游戏,问一把左轮枪,左轮有N个空间,其中用k发子弹,有p个问题,问抢第a[i]个空间有木有子弹,小明为了使自己被秒的概率最小,如何摆放子弹(游戏会一直继续知道有人挂掉),答案要按字典序显示。。。

  分类思想吧

  7 0 7(为了方便1-7顺序)

  。。。。。。。

  7 1 7

  。。。。。。X

  7 2 7

  。。。。。XX

  7 3 7

  。。。X。XX

  7 4 7

  。X。X。XX  

  ...

  8 0 8

  不写了,把情况都列一下,总结规律

View Code
#include<stdio.h>

int main()
{
__int64 n,k,p;
int i;
scanf(
"%I64d%I64d%I64d",&n,&k,&p);

__int64 temp;
if(k==0)
{
for(i=0;i<p;i++)
{
scanf(
"%I64d",&temp);
printf(
".");
}
}
else if(n==k*2)
{
for(i=0;i<p;i++)
{
scanf(
"%I64d",&temp);
if(temp%2==0)printf("X");
else printf(".");
}
}
else if((n>k*2)&&(n%2==1))//特殊判断当n为奇数时
{
for(i=0;i<p;i++)
{
scanf(
"%I64d",&temp);
__int64 z;
z
=n-temp;
if((z==0)||((k-1)*2>=z&&z%2==1))
printf(
"X");
else
printf(
".");

}
}
else if(n>k*2)//n>k*2,n为偶数时
{

for(i=0;i<p;i++)
{
scanf(
"%I64d",&temp);
__int64 z;
z
=n-temp+1;
if(z<=2*k&&z%2==1)
printf(
"X");
else
printf(
".");
}
}
else//n<2*k
{
__int64 t,rr;
t
=n-k;
rr
=n-t*2;

for(i=0;i<p;i++)
{
scanf(
"%I64d",&temp);
__int64 z;
z
=n-temp+1;
t
=z-rr;

if((t<=0)||(t%2==1))
printf(
"X");
else printf(".");
}
}
printf(
"\n");

}