全WA求助
查看原帖
全WA求助
66964
heyuguo楼主2024/2/29 21:18

如下

#include<bits/stdc++.h>
using namespace std;
struct node
{
	long long col,date;
}g[105][105];
long long n,m,l,r,f[105][105];//ǰ:ÌìÊý, ºó:¹«Ô¢Êý
char c[105][105];
void outp(long long id,long long caseid)
{
	printf("Case %lld:\n\n",caseid);
	node u={id,r},ax[105];
	long long cnt=0;
//	cout<<u.col<<' '<<u.date<<'\n';
	while(u.date>=l)
	{
//		cout<<cnt<<endl;
		ax[++cnt]=u;
		u=g[u.date][u.col];
//		cout<<u.col<<' '<<u.date<<'\n';
	}
//	for(int i=1;i<=cnt;i++)
//	{
//		cout<<ax[i].col<<' '<<ax[i].date<<'\n';
//	}
	printf("%c: %lld-",ax[cnt].col+'A'-1,l);
	for(int i=cnt-1;i>=1;i--)
	{
		if(ax[i].col!=ax[i+1].col)
		{
			printf("%lld\n%c: %lld-",ax[i+1].date+1,ax[i].col+'A'-1,ax[i].date);
		}
	}
	cout<<r+1<<'\n';
}
int main()
{
	long long d=1;
	cin>>n>>m;//n:ÌìÊý, m:¹«Ô¢Êý 
	while(m!=0&&n!=0)
	{
		memset(f,0x3f,sizeof f);
		memset(g,0x3f,sizeof g);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				cin>>c[i][j];
		cin>>l>>r;r--;
		for(int i=1;i<=m;i++)
		{
			if(c[l][i]=='O')
				f[l][i]=0,g[l][i].date=0,g[l][i].col=i;
		}
		for(int i=l+1;i<=r;i++)
		{
			for(int j=1;j<=m;j++)
			{
				if(c[i][j]=='X')continue;
				for(int k=1;k<=m;k++)
				{
					if(c[i-1][k]=='X')continue;
					if(j==k)
					{
						if(f[i-1][k]<f[i][j])
						{
							f[i][j]=f[i-1][k];
							g[i][j].col=k;
							g[i][j].date=i-1;
						}
					}
					else
					{
						if(f[i-1][k]+1<f[i][j])
						{
							f[i][j]=f[i-1][k]+1;
							g[i][j].col=k;
							g[i][j].date=i-1;
						}
					}
				}
			}
		}
		long long ans=999,cl;
		for(int i=1;i<=m;i++)
		{
			if(ans>f[r][i])
			{
				ans=f[r][i];
				cl=i;
			}
		}
		if(ans>=999)
		{
			printf("Case %lld:\n\n",d);
			cout<<"Not available\n";
		}
		else
		{
//			cout<<ans<<endl;
			outp(cl,d);
		}
		cin>>n>>m;d++;
	}
	return 0;
}
2024/2/29 21:18
加载中...