codeforces D - Biathlon Track

好久没写博客了,或者说好久没有刷题了。
最近为准备省赛,每天晚上还找了个codeforces的比赛来做,今天找了个最水的,然后看到了这道题,自我感觉暴力可以过得感觉。写完之后不断的在原有的代码上进行格式什么的优化,连加法也坚决不会同事让他出现两次。然后数据最多可以过到样例9,看了别人的代码,也是这样过得。然后的然后去了好多头文件,连求绝对值的函数都用内敛函数进行代替了,可以跑到22组了,仍然超时啊。。。
对着代码发了一会呆,然后突然发现有一个内部循环多循环了一次,改过来,AC了,激动的都想哭了,一晚上都在改暴力的代码。。。。
暴力:记录矩形可以经过的每条边经过的任意的长度的值,然后暴力枚举矩形,觉得自己的代码写的好那个什么。。。。
#include <cstdio>
#include <cstdlib>

#include<climits>
#include<iostream>
using namespace std;
#define rep(i, n) for (int i=0; i<(n); ++i)
#define repf(i, a, b) for (int i=(a); i<=(b); ++i)
#define N 305
int d[N][N],u[N][N],vd[N][N],vu[N][N];
int n,m,t;
int a[N][N];
int tp,tu,td;
inline int abs2(int x){
	if(x>=0) return x;
	return -x;
}
int main(){
     while(~scanf("%d%d%d",&n,&m,&t)){
		 scanf("%d%d%d",&tp,&tu,&td);
		 rep(i,n)
			 rep(j,m)
			 scanf("%d",&a[i][j]);
         rep(i,n){ 
			 repf(j,1,m-1)
               if(a[i][j]>a[i][j-1])  d[i][j]=d[i][j-1]+tu,u[i][j]=u[i][j-1]+td;
			   else if(a[i][j]==a[i][j-1]) d[i][j]=d[i][j-1]+tp,u[i][j]=u[i][j-1]+tp;
			   else d[i][j]=d[i][j-1]+td,u[i][j]=u[i][j-1]+tu;
		 }
		 rep(i,m){
			 repf(j,1,n-1)
				 if(a[j][i]>a[j-1][i]) vd[i][j]=vd[i][j-1]+tu,vu[i][j]=vu[i][j-1]+td;
				 else if(a[j][i]==a[j-1][i]) vd[i][j]=vd[i][j-1]+tp,vu[i][j]=vu[i][j-1]+tp;
				 else vd[i][j]=vd[i][j-1]+td,vu[i][j]=vu[i][j-1]+tu;
		 }
		 int ansx,ansy,ansxx,ansyy,r=INT_MAX;
       rep(i,n){
		   rep(j,m){
              repf(k,j+2,m-1){
				  repf(l,i+2,n-1){
					  int tmp=abs2(d[i][k]-d[i][j]+vd[k][l]-vd[k][i]+u[l][k]-
						  u[l][j]+vu[j][l]-vu[j][i]-t);
					  if(tmp<r)
						  ansx=i,ansy=j,ansxx=l,ansyy=k,
							  r=tmp;
				  }
			  }
		   }
	   }
	   printf("%d %d %d %d\n",ansx+1,ansy+1,ansxx+1,ansyy+1);
	 } 
	 return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定的小Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值