题解 P6703 【[COCI2010-2011#7] KOLO】
wyhm
·
·
题解
思路:
这道题目按照题目说的模拟就可以了。
我们需要处理几个重点:
$2.$如果转到了一个地方,颜色和这个相同就还是合法的。
$3.$输出要从它到 $0$ ,然后从倒数第二个到它加一的值。
## 代码:
```c
#include <stdio.h>
int n,k,ans[31],f=0,s;//楔子数,旋转数,答案,当前位置,转的次数
char c,p[31];//当前字母,判断是否使用
int main()
{
scanf("%d%d",&n,&k);//输入楔子数,旋转数
for(int i=0;i<n;i++)//赋初始值,开始全部都是未知的
ans[i]='?';//赋值
for(int i=1;i<=k;i++)//循环
{
scanf("%d %c",&s,&c);//输入旋转次数和输入字符
f=(f+s)%n;//更新位置
if((ans[f]!='?'&&ans[f]!=c)||(p[c-'A']==c&&ans[f]!=c))//判断是否成立
{
printf("!");//不成立输出感叹号
return 0;//结束程序
}
p[c-'A']=c;//这个字符用过了
ans[f]=c;//更新答案
}
for(int i=f;i>=0;i--)//从当前位置到0
printf("%c",ans[i]);//输出答案
for(int i=n-1;i>=f+1;i--)//从倒数第二个数的它后面那个数
printf("%c",ans[i]);//输出答案
return 0;//别忘了
}
```
谢谢管理审核和大家观赏!