标签:
http://acm.hdu.edu.cn/showproblem.php?pid=4708
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
分析:
题意是求将水平阴影或者竖直阴影旋转最小的次数和,使得主对角线与副对角线的代数和最大。
直接模拟即可。
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 long long a[15][15]; 6 long long step,ans; 7 void solve1(int t,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 8 { 9 int i; 10 long long w; 11 t = t-1; 12 for(i=0;i<t;i++) 13 { 14 w = a[x1][y1] + a[x2][y2]+a[x3][y3]+a[x4][y4]; 15 y1++; 16 x2++; 17 y3--; 18 x4--; 19 if(w>ans) 20 { 21 ans = w; 22 step = i; 23 } 24 } 25 } 26 void solve2(int t,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 27 { 28 int i; 29 t =t-1; 30 long long w; 31 //printf("ans = %d %d\n",ans,step); 32 for(i=0;i<t;i++) 33 { 34 w = a[x1][y1] + a[x2][y2]+a[x3][y3]+a[x4][y4]; 35 x1++; 36 y2--; 37 x3--; 38 y4++; 39 if(w>=ans) 40 { 41 ans = w; 42 if(step>i) 43 step=i; 44 } 45 } 46 } 47 int main() 48 { 49 int T; 50 long long ss,aa; 51 while(scanf("%d",&T) && T) 52 { 53 ss = 0;aa = 0; 54 for(int i=1;i<=T;i++) 55 for(int j=1;j<=T;j++) 56 scanf("%lld",&a[i][j]); 57 int mid1 = (T+1)/2; 58 for(int i=3,k=1;i<=T;i=i+2,k++) 59 { 60 step = 0;ans = 0; 61 solve1(i,mid1 - k,mid1-k,mid1-k,mid1+k,mid1+k,mid1+k,mid1+k,mid1-k); 62 solve2(i,mid1 - k,mid1-k,mid1-k,mid1+k,mid1+k,mid1+k,mid1+k,mid1-k); 63 ss= ss +step; 64 aa = ans+aa; 65 } 66 printf("%lld %lld\n",aa+a[mid1][mid1],ss); 67 } 68 return 0; 69 }
hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup
标签:
原文地址:http://www.cnblogs.com/jeff-wgc/p/4467506.html