Codeforces 366E 模拟题

唉 真是越来越弱了 这个状态还怎么搞ACM啊??? 很水的模拟题居然没想到!

题目大意:在一张图上有n*m个点,每个点上有一个值k(1<=k<=9),定义2个点之间的运算为f(a,b)=abs(x[a]-x[b])+abs(y[a]-y[b]).输入s个值为c[i]的点,问从值为任一值为c[i]的点开始移动到地图上任一值为c[i+1]的点,其中使得这两点的f运算最大的f的值为多少?

题目链接:http://codeforces.com/problemset/problem/366/E

题解就不说了,看代码应该可以看懂。

#include<stdio.h>
int min(int x, int y){
	if (x>y) return y;
	else return x;
}
int max(int x, int y){
	if (x>y) return x;
	else return y;
}
int main(void){
	int n,m,k,s,i,j,u,f[10][2],g[10][2],ans=0;
	scanf("%d%d%d%d",&n,&m,&k,&s);
	for (i=1;i<=k;i++) {
		g[i][0]=n+m;g[i][1]=n-1;
		f[i][0]=0;f[i][1]=1-m;
	}
	for (i=1;i<=n;i++){
		for (j=1;j<=m;j++){
			scanf("%d",&u);
			f[u][0]=max(i+j,f[u][0]);g[u][0]=min(i+j,g[u][0]);
			f[u][1]=max(i-j,f[u][1]);g[u][1]=min(i-j,g[u][1]);
		}
	}
	for (u=0;u<s;u++,n=m){
		scanf("%d",&m);
		if (u) ans=max(ans,max(max(f[n][0]-g[m][0],f[m][0]-g[n][0]),max(f[n][1]-g[m][1],f[m][1]-g[n][1])));
	}
	printf("%d",ans);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值