Codeforces Round #662(Div.2)

题目链接:A. Rainbow Dash, Fluttershy and Chess Coloring
题意是给一个正方形区域上色,类似于国际象棋:给两种颜色,要求相邻块的颜色不能相同。上色顺序是必须在一个已上色的相邻块上或者边界上上色。求最少上色几次可以完成全部上色?
最需要的就是读懂题目,发散思维。第一步:将边界隔一个上色一个,那么这时候我们会将边界的一半上色完。第二步:我们会将所有的边界上完色,并对边界内部的第一层的一半上色。这里是和第一步相同的逻辑,只不过是边长减少了2.因此,如果有边长为n,那么我们"第一步"执行n/2次,最终会剩下最内部的一个块,因此:结果为n/2+1.

#include <bits/stdc++.h>
using namespace std;
int main(){
    int t,n;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        printf("%d\n",n/2+1);
    }
    return 0;
}

这道题我当时想不到这个地方,就不断地画图试验。但是一开始地试验仍有错误,那就是我们要注意"最少"两字。不同地上色方法,可能会导致结果的不同。
😄😄😄

posted @ 2020-08-08 10:01  sszz_w  阅读(241)  评论(0编辑  收藏  举报