杭电1867 A + B for you again

2024-09-02 11:58
文章标签 杭电 1867

本文主要是介绍杭电1867 A + B for you again,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Hot~ 2014暑期多校联合训练——正式启动报名~ 详见“杭电ACM”微博~

A + B for you again

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3811    Accepted Submission(s): 970


Problem Description
Generally speaking, there are a lot of problems about strings processing. Now you encounter another such problem. If you get two strings, such as “asdf” and “sdfg”, the result of the addition between them is “asdfg”, for “sdf” is the tail substring of “asdf” and the head substring of the “sdfg” . However, the result comes as “asdfghjk”, when you have to add “asdf” and “ghjk” and guarantee the shortest string first, then the minimum lexicographic second, the same rules for other additions.

Input
For each case, there are two strings (the chars selected just form ‘a’ to ‘z’) for you, and each length of theirs won’t exceed 10^5 and won’t be empty.

Output
Print the ultimate string by the book.

Sample Input
        
asdf sdfg asdf ghjk

Sample Output
        
asdfg asdfghjk
#include<stdio.h>
#include<string.h>
const int n=100001;
int next[n];
int len1,len2;
void getnext(char s[])
{
int i=0,j=-1;
next[0]=-1;
while(i<=len2)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int kmp(char s1[],char s2[])
{
int i=0,j=0;
len1=strlen(s1);
len2=strlen(s2);
getnext(s2);
while(i<len1&&j<len2)
{
if(j==-1||s1[i]==s2[j])
{
i++;
j++;
}
else
j=next[j];
}
if(i>=len1)
return j;
else
return 0;
}
int main()
{
char str1[n],str2[n];
while(~scanf("%s%s",str1,str2))                    
/*这一题不用str1+1会更加方便,上一题剪布条的其实也可以直接用s而不用s+1,只要把getnext()和kmp()里面的一些值改一下就可以  */
{
int a=kmp(str1,str2);
int b=kmp(str2,str1);
if(a==b)
{
if(strcmp(str1,str2)>0)
{
printf("%s",str2);
printf("%s\n",str1+a);
}
else
{
printf("%s",str1);
printf("%s\n",str2+a);
}
}
else if(a>b)
{
printf("%s",str1);
printf("%s\n",str2+a);
}
else
{
printf("%s",str2);
printf("%s\n",str1+b);
}
}
}

这篇关于杭电1867 A + B for you again的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129892

相关文章

2024杭电8

1004.cats 的重力拼图 题意: 有一个n*m的矩阵,给出最开始拼图的位置。 可以有四个选择,设置重力的方向,就是拼图会向一个方向竖直掉落到最底。 问任意操作次数后拼图走过的方格数量最大值。 题解: 首先已经在边缘的拼图,只能沿着边走一圈,再判断最开始可以朝哪个方向移动是最大值。 代码: #include<bits/stdc++.h>using namespace s

2024杭电6

1001.造花(简单版) 题意: 菊花图:n-1个节点都连接同一节点的树。 给定一棵树,删掉一个节点和连向这个点的所有边,使剩下两个连通块都构成菊花图,问是否可以做到。 题解: 菊花图只有中心节点的度可以没有限制,其余节点的度都是1。 要删除一个节点,要求剩下两个连通块,那就只能删掉度为2的节点,剩下两个菊花图,菊花图最多一个度不是1的节点。 所以度不是1的节点数最多为5,如图。

杭电 1297 Children’s Queue .

http://acm.hdu.edu.cn/showproblem.php?pid=1297   计算F(n): 一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1); 二:当最后一个是女孩F时候,第n-1个肯定是女孩F,这时候又有两种情况:         1)前面n-2个可以按n-2个的时候的规则来,完全可以,即是F(n-2);

2014.1.13 杭电习题 绝对值排序

绝对值排序 Problem Description(问题描述) 输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。 Input(输入) 输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。 Output(输出) 对于每个测试实例,输出排序后的结果,两个数之间用一个

2014.1.13 杭电习题 二维字符串中出现数量最多的字符串

Let the Balloon Rise Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 15   Accepted Submission(s) : 6 Font: Times New Roman | Verdana | Georgi

递推—杭电2044 一只小蜜蜂...

http://acm.hdu.edu.cn/showproblem.php?pid=2044 一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35811    Accepted Submission(s): 1317

杭电1280 前m大的数(哈希表)

前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9557    Accepted Submission(s): 3350 Problem Description 还记得Gardon给小希布置的那个作业么?(上次比赛的1

杭电2087 剪花布条

跟1711一样的kmp入门题目 #include<stdio.h> #include<string.h> char s[1111],t[1111]; int next[1111],len1,len2; void getnext() { int i=1,j=0; next[1]=0; while(i<len2) { if(j==0||t[i]==t[j])

杭电1060

不知道公式,修改了别人的代码,公式应该是a=n*lgn;然后10^(a的小数)取整型; #include #include int main() {     __int64 k,b,i,d;     double a,m,n,c;     scanf("%I64d",&k);     while(k--)     {         scanf("%lf",&n);         a=n*

【ACM】----杭电oj 1176

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28063    Accepted Submission(s): 9565 Problem Description 都说天上不会掉馅饼,但有一天gameboy正