题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
看成对n取模的有限群,定义算子“移动”
区间看作群上定义的映射,在begin距离n过于近的时候判断光标的状态选择更新begin或者end
begin和end进入上一步判断的标准只和光标最后的状态有关
#include <stdio.h>
int begin,end;
int trans(char opch)
{
if(opch=='U')return -1;
else return 1;
}
int limitedg(int *opra,int n,int len)//有限群算子opra
{
int step;
step=0;
int output;
for(int i=0;i<len;i++)
{
step+=opra[i];
}
output=n*150+step;
output=output%n;
return output+1;//向+1映射一下,规则里没有第0首
}
void ismygroup(int *opra,int n,int len)
{
begin=150*n,end=150*n+3;
int step=150*n;
for(int i=0;i<len;i++)
{
step+=opra[i];
if(step<begin){begin-=1;end-=1;}
if(step>end){begin+=1;end+=1;}
}
if(n>4)
{
if(begin%n>=n-3)
{
if(step%n<=2){begin=1;end=4;}
else if(step%n>=n-3){begin=n-3;end=n;}
}
else{begin=begin%n+1;end=end%n+1;}
}
else{begin=1; end=n;}
}
int main() {
int n;scanf("%d",&n);
char str[1001];scanf("%s",str);
int len=strlen(str);
int opration[len];
for(int i=0;i<len;i++)
opration[i]=trans(str[i]);
int output=limitedg(opration, n,len);
ismygroup(opration,n,len);
for(int i=begin;i<=end;i++)
printf("%d ",i);
printf("\n");
printf("%d",output);
return 0;
}
深信服公司福利 903人发布
查看15道真题和解析