= =D题读了一遍题 发现没有明白。。。于是后两题就弃了没做。。。
A题
用两个bool数组记录某一行或者某一列是否访问过,再有两个int记录有多少个行和列访问过,输出这两个int里面比较下的一个即可。
B题
判断a[i]+a[i]>=b[i]是否成立 如果不成立则说明这里是不和谐的joy--;当成立时,joy+=b[i]/2*(b[i] - b[i]/2);(注意这里要判断b[i]/2 和 b[i] - b[i]/2是否为0,如果为0的话,joy--,这里被坑了= =)
再来就是注意要用__int64储存答案;
C题
我们用a[i]记录从第一个数开始到第i个数中1的个数,再使用b[i]记录i/k,i/k+k,i/k+2k,……,i中0的个数。
若查询的范围是i到j,那么b[j] - b[i - k]就是操作中放入1的总数,而此时(a[j] - a[i - 1]) - ((j - i +1) / k - b[j] - b[i - 1]) 就是需要拿掉1的个数
所以答案就是a[j] - a[i - 1] - (j - i + 1) / k + 2 * (b[j] - b[i - 1])