codeforces D - Biathlon Track

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

#include 
#include 

#include
#include
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



你可能感兴趣的:(零零碎碎)