保研机试题

2018 BIT

第一题

 给定任意个整数,以逗号隔开,输出最后一个重复数字,没有重复数字输出-1

输入:

1,2,3,4,4,3,2,1
1,2,3,4,5,6,7,8
0
1,0
0,1,0,1

输出

1
-1
-1
-1
1

没有考虑大整数和负数,而且没说清楚的是万一 给了一个全是-1的数列

int s[1000010];
int main()
{
    int x;
    char c;
    int flag=-1,f=0;
    while(1)
    {
        scanf("%d%c",&x,&c);
        memset(s,0,sizeof(int));
        int a=s[x];

        s[x]++;
        int b=s[x];
        if(b>a)
        {
            flag=x;
            if(b>=2)
            f=1;
        }
         if(c=='\n')
            break;
    }
    if(f==0)
       cout<<"-1"<

第二题

第二个题是一次shift操作就是把一个单词的第一个挪到最后,单词有n位就最多挪n次,问可以和原单词相同几次。

如输入:byebye    输出:2

    输入:abcd    输出:1

char s[1000010];
int  nex[1000010];
int getnex()
{
    int i=0,j=-1;
    nex[0]=-1;
    while(s[i])
    {
        if(j==-1||s[i]==s[j])
        {
            i++;j++;

            nex[i]=j;
        }
        else
            j=nex[j];
    }
    int len=strlen(s);
    i=len-j;
    if(len%i==0)
        return len/i;
    else
        return 1;


}
int main()
{
    while(cin>>s)
    {
        if(s[0]=='.')
            break;
        cout<

我感觉就是个kmp的问题。

 

 

存一下模板

转载自

https://blog.csdn.net/qq_34374664/article/details/80412575

你可能感兴趣的:(ACM刷题)