2018浙江理工大学迎新赛——决赛

AC2道,菜鸡菜鸡菜鸡

星星

小希来到依图面试啦,看到公司的宣传板子上写着:

“依图科技从事人工智能创新性研究,致力于将先进的人工智能技术与行业应用相结合,建设更加安全、健康、便利的世界。

依图带着国际视野组建世界一流的研发团队。我们不是为了把大公司或实验室的技术拿来快速套利,我们参与人工智能领域的基础性科学研究,致力于全面解决机器看、听、理解的根本问题,相信能在计算机视觉、自然语言理解、知识推理、智能硬件、机器人等技术领域作出突破性贡献。

依图的技术已经服务于安防、金融、交通、医疗等多个行业。

我们好奇智慧的奥秘,拓展智能的边界,期待与你一起构建智能的未来。”

小希的心情很是激动,快活地坐在了面试室的外面,想着未来可能就在依图工作,有着无限的未来和希望。

……

面试洽谈中,面试官开玩笑一般地问小希,你能不能出一个水题,来作为20182018年浙江工业大学迎新赛决赛的签到题呢?

小希简单想了想,脱口而出:

给定一个存在ast∗(称为星星)的小写字母串,ast∗可以用任意小写字符串或空串代替,给定一个含有ast∗的串,问字典序最小的,能由原串生成的长度为MM的串是什么样的。

注意:一个串中可以有多个星星,多个星星可以出现在一起。

如果构造不出这样的串,则输出:”ast yitu ast∗yitu∗”(不含引号)

好了,现在这道题就在你的面前等着你。

Input

第一行为数据组数T(T le 1000)T(T≤1000)。

第一行输入两个整数N,MN,M,分别代表原串和希望的串的长度。

1 le N le M-S le 1000001≤N≤M−S≤100000 (其中SS代表原串中’ast∗’的个数)

数据保证 sum n le 1000000∑n≤1000000

Output

对于每组数据输出一行,即符合题目要求的字符串,行末不要有多余空格。

Sample Input 1

3
6 8
aab
12 9
i
loveyitu
11 4
data
error
Sample Output 1

aaaaaaab
iloveyitu
yitu

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define N 100005
char s[N],ans[N];
int main()
{

    int t,i,n,m,j;

    scanf("%d",&t);
    while(t--)
    {
        int flag=0;
        scanf("%d %d",&n,&m);
        scanf("%s",s);
        int a=0,b=0;
        for(j=0;s[j]!='';j++)
        {
            if(s[j]=='*')
                b++;
            else
            {
                ans[a++]=s[j];
            }
        }
        ans[a]='';
        int len1=strlen(ans);
        if(len1==m)
        {
            puts(ans);
            a=0;
            b=0;
            memset(ans,'0',sizeof(ans));
        }
        if(len1>m)
        {
            printf("*yitu*
");
            a=0;
            b=0;
            memset(ans,'0',sizeof(ans));
        }
        if(len1<m)
        {
            int c=m-len1;
            memset(ans,'0',sizeof(ans));
            a=0;
            for(j=0;s[j]!='';j++)
        {

            if(s[j]=='*'&&flag==0)
            {
                flag=1;
                for(int l=0;l<c;l++)
                {
                  ans[a++]='a';
                }
            }
            else if(s[j]!='*')
            {
                if(a==m)
                    break;
                ans[a++]=s[j];
            }
        }
        if(flag==1)
        {
           ans[a]='';
        puts(ans);
        a=0;
        b=0;
        memset(ans,'0',sizeof(ans));
        }
        else
        {
            printf("*yitu*
");
        }
    }
    }
    return 0;
}

cool cooler coolest

Description

ctw收到了一个粉丝送来的手环,手环是由三种ctw最喜欢的颜色的晶石串成的。

ctw认为这很“cool”,如果手环上的任意两个相邻的晶石颜色都不同就更“cool”了,当然如果手环上任意三个相邻的晶石颜色都各不相同,那就是最“cool”的了。

三种颜色分别用数字1,2,3表示,一串仅包含字符1,2,3的字符串ss表示一个手环。

例如 123 表示一个由 1,2,3 三种颜色的晶石依次串成的手环。显然,ctw会认为这样的手环是最“cool”的,程序输出 coolest。

同理,对于 1212 应该输出 cooler,11111 输出 cool。

请根据ss判断ctw对该手环的评价。

Input

第一行包括一个整数TT,下面是TT组数据。

每组数据一行包括一个字符串ss。

1 le T le 10001≤T≤1000
3 le |s| le 10003≤∣s∣≤1000

Output

每组数据一行,根据题意输出 cool, cooler 或 coolest。

Sample Input 1

4
123
1212
11111
12123
Sample Output 1

coolest
cooler
cool
cooler
Hint

手环是环形的,也就是说 123,231,321 表示的是同样的手环。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define N 1005
int main()
{
    int t,i;
    char s[N],ss[N];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",s);
        int len=strlen(s);
        ss[0]=s[len-2];
        ss[1]=s[len-1];
        ss[2]='';
        strcat(ss,s);
        int l=strlen(ss),flag=0;
        for(i=0;i<l&&i+1<l;i++)
        {
            if(ss[i]==ss[i+1])
            {
                printf("cool
");
                flag=1;
                break;
            }
        }
        if(flag==1) continue;
        if(flag==0)
        {
              for(i=0;i<l&&i+2<l;i++)
            {
                if(ss[i]==ss[i+2])
                {
                printf("cooler
");
                flag=1;
                break;
                }
            }
        }
        if(flag==1) continue;
        else printf("coolest
");
        memset(ss,'0',sizeof(ss));
    }
    return 0;
}
原文地址:https://www.cnblogs.com/skyleafcoder/p/12319574.html