题解 P6703 【[COCI2010-2011#7] KOLO】

· · 题解

思路:

这道题目按照题目说的模拟就可以了。

我们需要处理几个重点:

$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;//别忘了 } ``` 谢谢管理审核和大家观赏!