翻转翻转
翻转翻转
http://www.nowcoder.com/questionTerminal/ad11db28e0f44a1c97af06fd002477a1
题解:
题目难度:二星
考察点: 数形结合,找规律
易错点:
很多同学看到这个题目首先想到可以暴力,但是由于这个题的和都太大了,如果暴力的话,无论是时间还是空间上都无法承受,所以这是一种不可取的做法。
解法:数形结合+找规律
首先有一条非常重要的性质:对于一个位置,如果被翻偶数次,它一定维持原来的状态,如果被翻奇数次,则一定跟原来的状态相反。有了这种重要的性质我们可以很容易画图来解决这个问题。
显然如图a所示,对于的,它被翻奇数次,所以是。如图b所示,对于的,黄色部分会被翻转偶数次,因此维持原状不变,红色部分会被翻转奇数次,因此状态发生改变,而黄色部分仅为最边上的个,所以答案是。同理,推广到的,红色部分被翻转的次数为次,为奇数,而黄色部分被翻转的次数为偶数,黄色部分为最外面的一圈,所以答案为。
#include "bits/stdc++.h" using namespace std; typedef long long LL; int main() { int T; scanf("%d",&T); while(T--){ LL n,m; scanf("%lld%lld",&n,&m); if(n==1&&m==1){ printf("1\n"); }else if(n==1){ printf("%lld\n",m-2); }else if(m==1){ printf("%lld\n",n-2); }else{ printf("%lld\n",(n-2)*(m-2)); } } return 0; }