1 条题解

  • 0
    @ 2025-4-12 21:54:23

    C :

    #include"stdio.h"
    #include"string.h"
    int main()
    {
        char a[1000],b[1000],c[1000];
        int n,i,j,k,count=1,len,flag;
        scanf("%d",&n);
        while(n--)
        {
              flag=0;
              scanf("%s%s%s",a,b,c);
              len=strlen(c);
              for(i=0,j=0,k=0;k<len;k++)
              {
                  if(c[k]==a[i]) i++;
                  else if(c[k]==b[j])  j++;
                  else {
                          flag++;
                          break;
                       }   
              } 
              for(i=0,j=0,k=0;k<len;k++)
              {
                  if(c[k]==b[j]) j++;
                  else if(c[k]==a[i])  i++;
                  else {
                          flag++;
                          break;
                       }   
              }   
              printf("Case %d: ",count++);
              if(flag==2)
              printf("no\n");
              else
              printf("yes\n");  
        }
    }
    

    C++ :

    #include <stdio.h>
    #include <string.h>
    
    int main() {
    	int n, dp[201][201], i, j, la, lb, C = 0;
    	char a[201], b[201], c[402];
    	scanf("%d", &n);
    	while (n--) {
    		scanf("%s%s%s", a, b, c);
    		memset(dp, 0, sizeof(dp));
    		la = strlen(a);
    		lb = strlen(b);
    		for (i = 0; i < la; i++) {
    			if (a[i] == c[i])
    				dp[i + 1][0] = 1;
    			else
    				break;
    		}
    		for (i = 0; i < lb; i++) {
    			if (b[i] == c[i])
    				dp[0][i + 1] = 1;
    			else
    				break;
    		}
    		for (i = 1; i <= la; i++)
    			for (j = 1; j <= lb; j++)
    				if ((dp[i - 1][j] && a[i - 1] == c[i + j - 1]) || (dp[i][j - 1]
    						&& b[j - 1] == c[i + j - 1]))
    					dp[i][j] = 1;
    		printf("Case %d: ", ++C);
    		puts(dp[la][lb] ? "yes" : "no");
    	}
    	return 0;
    }
    

    Java :

    import java.util.Scanner;
    class deal{
    	public int n,m;
    	public char [] one,two,comb;
    	public int flag[][]=new int[210][210];
    	public deal(){}
    	public void init(String...all){
    		one=all[0].toCharArray();
    		two=all[1].toCharArray();
    		comb=all[2].toCharArray();
    		n=all[0].length();
    		m=all[1].length();
    		for(int i=0;i<n+5;i++)
    		{
    			for(int j=0;j<m+5;j++)flag[i][j]=0;
    		}
    	}
    	public boolean solve(int i,int j,int k){
    		if(i>=n && j>=m)return true;
    		if(flag[i][j]==1)return false;
    		boolean f=false;
    		if(i<n)
    		{
    			if(one[i]==comb[k])
    			{
    				f=solve(i+1,j,k+1);
    				if(f)return f;
    			}
    		}
    		if(j<m)
    		{
    			if(two[j]==comb[k])
    			{
    				f=solve(i,j+1,k+1);
    				if(f) return f;
    			}
    		}
    		flag[i][j]=1;
    		return false;
    	}
    }
    public class Main{
    	public static void main(String...strings)
    	{
    		Scanner in = new Scanner(System.in);
    		int t=in.nextInt();
    		deal h = new deal();
    		int T=0;
    		while(T<t)
    		{
    			T++;
    			System.out.print("Case "+T+": ");
    			h.init(in.next(),in.next(),in.next());
    			if(h.solve(0,0,0))System.out.println("yes");
    			else System.out.println("no");
    		}
    	}
    }
    
    • 1

    信息

    ID
    2365
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者