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
iloveyitu
11 4
dataerror
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]!='\0';j++)
{
if(s[j]=='*')
b++;
else
{
ans[a++]=s[j];
}
}
ans[a]='\0';
int len1=strlen(ans);
if(len1==m)
{
puts(ans);
a=0;
b=0;
memset(ans,'0',sizeof(ans));
}
if(len1>m)
{
printf("*yitu*\n");
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]!='\0';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]='\0';
puts(ans);
a=0;
b=0;
memset(ans,'0',sizeof(ans));
}
else
{
printf("*yitu*\n");
}
}
}
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]='\0';
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\n");
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\n");
flag=1;
break;
}
}
}
if(flag==1) continue;
else printf("coolest\n");
memset(ss,'0',sizeof(ss));
}
return 0;
}