HDOJ2572 终曲
2014-02-16 11:34
134 查看
原题链接
这题刚开始做的时候脑海里乱成了一锅粥,%>_<% 整理了两天才把它给敲出来,经典题。
附ac代码:
#include <stdio.h>
#include <string.h>
char buf[101], buff[101], a[101], b[11], c[11];
int strco(int i, int j, char str[]){
int k, kk;
for(k = i, kk = 0; k <= j; ++k, ++kk)
str[kk] = a[k];
str[kk] = '\0';
return j - i + 1;
}
struct node{
int min, ok;
};
bool cmp(char s[], char s1[]){
int i;
for(i = 0; s1[i] != '\0'; ++i)
if(s[i] != s1[i]) return false;
return true;
}
int main(){
int t, lena, lenb, lenc, i, ii, j, jj, temp;
node min;
scanf("%d", &t);
while(t-- && scanf("%s%s%s", a, b, c)){
lena = strlen(a);
lenb = strlen(b);
lenc = strlen(c);
min.ok = 0;
for(i = 0; i != lena; ++i){
if(cmp(a + i, b)){
ii = i + lenb - 1; //b串的末尾下标
for(j = 0; j != lena; ++j)
if(cmp(a + j, c)){
jj = j + lenc - 1; //c串的末尾下标
if(!min.ok){
min.min = strco((i < j ? i : j), (ii > jj ? ii : jj), buf);
min.ok = 1;
continue;
}
temp = (ii > jj ? ii : jj) - (i < j ? i : j) + 1;
if(temp < min.min)
min.min = strco(i < j ? i : j, ii > jj ? ii : jj, buf);
else if(temp == min.min) {
strco(i < j ? i : j, ii > jj ? ii : jj, buff);
if(strcmp(buf, buff) > 0)
strcpy(buf, buff);
}
}
}
}
if(min.ok)
puts(buf);
else puts("No");
}
return 0;
}
这题刚开始做的时候脑海里乱成了一锅粥,%>_<% 整理了两天才把它给敲出来,经典题。
附ac代码:
#include <stdio.h>
#include <string.h>
char buf[101], buff[101], a[101], b[11], c[11];
int strco(int i, int j, char str[]){
int k, kk;
for(k = i, kk = 0; k <= j; ++k, ++kk)
str[kk] = a[k];
str[kk] = '\0';
return j - i + 1;
}
struct node{
int min, ok;
};
bool cmp(char s[], char s1[]){
int i;
for(i = 0; s1[i] != '\0'; ++i)
if(s[i] != s1[i]) return false;
return true;
}
int main(){
int t, lena, lenb, lenc, i, ii, j, jj, temp;
node min;
scanf("%d", &t);
while(t-- && scanf("%s%s%s", a, b, c)){
lena = strlen(a);
lenb = strlen(b);
lenc = strlen(c);
min.ok = 0;
for(i = 0; i != lena; ++i){
if(cmp(a + i, b)){
ii = i + lenb - 1; //b串的末尾下标
for(j = 0; j != lena; ++j)
if(cmp(a + j, c)){
jj = j + lenc - 1; //c串的末尾下标
if(!min.ok){
min.min = strco((i < j ? i : j), (ii > jj ? ii : jj), buf);
min.ok = 1;
continue;
}
temp = (ii > jj ? ii : jj) - (i < j ? i : j) + 1;
if(temp < min.min)
min.min = strco(i < j ? i : j, ii > jj ? ii : jj, buf);
else if(temp == min.min) {
strco(i < j ? i : j, ii > jj ? ii : jj, buff);
if(strcmp(buf, buff) > 0)
strcpy(buf, buff);
}
}
}
}
if(min.ok)
puts(buf);
else puts("No");
}
return 0;
}
相关文章推荐
- [HDOJ2572]终曲
- HDOJ2572 终曲
- hdoj 2572
- HDOJ 1312 Red and Black (DFS)
- 【DP】 HDOJ 2048 4945
- HDOJ 1102 Constructing Roads(最小生成树)
- HDOJ 1116-Play on Words【欧拉路径+欧拉回路+并查集】
- HDOJ 1203 I NEED A OFFER!(01背包)
- hdoj1863 畅通工程
- HDOJ 1074 Doing Homework (状态压缩)
- hdoj 2412 Party at Hali-Bula 【树形dp】
- hdoj 1087 Super Jumping! Jumping! Jumping!
- (DFS)Oil Deposits--HDOJ
- HDOJ 1036 输入输出 水
- 【最短路】 HDOJ 1535 Invitation Cards
- hdoj 4753 博弈+搜索
- HDOJ 1018 Big Number
- (BFS)A计划--HDOJ
- hdoj1874 畅通工程续
- HDOJ 题目4497 GCD and LCM (组合数学,gcd性质)