Title Link: http://acm.hdu.edu.cn/showproblem.php?pid=4925
Idea: Calculate coordinates directly and if it is odd to plant trees, but be aware of the row or column as 1.
Write two kinds of code: a direct judgment calculation, another optimization calculation of the
Code1:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath>using namespace std; int main () {int T; scanf ("%d", &t); while (t--) {int n,m,i,j; while (scanf ("%d%d", &n,&m) ==2) {int sum=0; if (n==1&&m==1)//special case {printf ("1\n"); } else if (n==1| | M==1)//special case {if (m==1) {int t=n; N=m; m=t; } if (m%2==0) {sum=sum+ (m-1) * *; } else {sum+= (m/2*4); } printf ("%d\n", sum); } else {for (i=1;i<=n;i++) {for (j=1;j<=m;j++ ) {if ((i+j)%2==1) { if (i==1| | I==n) {if (j==1| | j==m) {sum+=4; } else {sum+=8; }} else if (j==1| | J==M) {if (i==1| | I==n) sum+=4; else {sum+=8; }} else//if (i!=1&&i!=n&&j!=1&&j!=m) {sum+=16; }}}} printf("%d\n", sum); }}} return 0;}
Code2:
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring>using namespace Std;int A[110][110];int Main () {int t,n,m; scanf ("%d", &t); while (t--) {int n,m,sum=0; scanf ("%d%d", &n,&m); if (n==1&&m==1) {printf ("1\n"); } else if (n==1| | M==1) {if (m==1) {int t=n; N=m; m=t; } if (m%2==0) {sum=sum+ (m-1) * *; } else {sum+= (m/2*4); } printf ("%d\n", sum); } else {if (n%2==1) {int t=n; N=m; m=t; } if (m%2==0) {sum+= ((m-1) *8); printf ("BB%d\n", sum); sum+= ((m/2-1) * (n-2) *16+ (n-2) *8); printf ("BB%d\n", sum); } else {if (n%2==0) {sum+= ((m-1) *8); sum+= ((n-2)/2* (m-2) *16); sum+= ((n-2) *8); } else {sum+= (m/2*16); printf ("AA%d\n", sum); sum+= ((n-2)/2* (m-2) *16); printf ("BB%d\n", sum); sum+= ((m-2)/2*16); printf ("CC%d\n", sum); sum+= ((n-1) *8); printf ("DD%d\n", sum); }} printf ("%d\n", sum); }} return 0;}