您的位置:首页 > 其它

FZU三月月赛A——字符串处理——简单题

2015-03-24 16:18 295 查看
#include<cstring>
#include<cstdio>
using namespace std;
const int MAX = 1100;

char s1[MAX],s2[MAX];
char x1[MAX],x2[MAX];
int num1[MAX],num2[MAX];
int number(int i,int j){
int sum = 0;
for(int k = j ; k >= i; k--)
sum = sum*10 + s1[k] - '0';
return sum;
}
int main()
{
while(~scanf("%s%s",s1,s2)){
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
int len1 = strlen(s1);
int k = 0;
for(int i = 0 ; i < len1 ;i++)
num1[i] = 1;
for(int i = 0 ; i < len1;i++){
if(i == 0){
x1[k] = s1[i];
if(s1[i+1] == '['){
int j;
for( j = i + 2;; j++)
if(s1[j] ==']' ) break;
int num = number(i+2,j-1);
num1[k] = num;
}
}
else {
if(s1[i] >= 'a' && s1[i] <= 'z' &&s1[i] != x1[k]){
k++;
x1[k] = s1[i];
if(s1[i+1] == '['){
int j;
for( j = i + 2;;j++)
if(s1[j] == ']') break;
int num = number(i+2,j-1);
num1[k] = num;
}
}
else num1[k]++;
}
}
//
int l1 = k;
//    for(int i = 0; i <= l1; i++)
//      printf("%c",x1[i]);*/
// for(int i = 0; i <= l1;i++)
//   printf("%d ",num1[i]);

k = 0;
int len2 = strlen(s2);
for(int i = 0 ; i < len2; i++)
num2[i] = 1;
for(int i = 0 ; i <len2;i++){
if(i == 0){
x2[k] = s2[i];
}
else{
if(x2[k] == s2[i])
num2[k]++;
else {
k++;
x2[k] = s2[i];
}
}
}

int l2 = k;
/*
printf("%d",l2);
for(int i = 0 ; i <= l2 ;i++)
printf("%d",num2[i]);*/
int flag = 0;//judge
k = 0;
int i;
if( l2 == 0 ){
int i;
for( i = 0 ; i <= l1;i++)
if(x1[i] == x2[0])
break;
if(i <= l1) {
puts("True");
continue;
}
}

for( i = 0; i <= l1; i++){
if(x1[i] == x2[0] && num1[i] >= num2[0] && x1[i+l2] == x2[l2] && num1[i+l2] >= num2[l2]){
for(int j =  1; j < l2 ; j++){
if(x1[j+i] == x2[j] && num1[j+i] == num2[j])
flag++;
}
if(flag+2 == l2+1)
break;
}
}
//printf("%d",l2);
// printf("%c %c",x1[0],x2[0]);

if(i <= l1) puts("True");
else puts("False");    }
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: