1 solutions

  • 0
    @ 2024-12-11 0:49:57

    C++ :

    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
    
    int T,n,m,i,j,k,l,r; 
    char s[105][105];
    int f[105][105],from[105][105],ans[105];
    
    int main()
    {
    	//freopen("aliez.in","r",stdin);
    	//freopen("aliez.out","w",stdout);
    	for(T=1;;++T)
    	{
    		scanf("%d%d",&n,&m);
    		if(n==0&&m==0)break;
    		for(i=1;i<=n;++i)scanf("%s",s[i]+1);
    		scanf("%d%d",&l,&r);--r;
    		for(i=1;i<=m;++i)
    		if(s[r][i]=='A')f[r][i]=0;
    		else f[r][i]=10000;
    		for(i=r-1;i>=l;--i)
    		for(j=1;j<=m;++j)
    		{
    			f[i][j]=10000;
    			if(s[i][j]=='A')
    			{
    				for(k=1;k<=m;++k)
    				if(f[i+1][k]+(j!=k)<f[i][j])
    				f[i][j]=f[i+1][k]+(j!=k),from[i][j]=k;
    			}
    		}
    		if(T!=1)printf("\n");
    		printf("Case %d:\n",T);
    		printf("\n");
    		k=1;
    		for(i=1;i<=m;++i)
    		if(f[l][i]<f[l][k])k=i;
    		if(f[l][k]>=1000)printf("Ti4 Newbee Win\n");
    		else
    		{
    			for(i=l;i<=r;k=from[i][k],++i)ans[i]=k;
    			for(i=l+1;i<=r;++i)if(ans[i]!=ans[i-1])printf("%c: %d-%d\n",'A'+ans[i-1]-1,l,i),l=i;
    			printf("%c: %d-%d\n",'A'+ans[r]-1,l,r+1);
    		}
    	}
    }
    
    
    • 1

    Information

    ID
    770
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By