Atcoder ABC230 C
C - X drawing
题意
有n x n个点,输入坐标 a,b,将满足一下条件的坐标涂黑
条件:
1、max(1 - a, 1 - b) <= k <= min(n - a, n - b)
2、max(1 - a, b - n) <= k <= min(n - a, b - 1)
涂黑的部分
1、(a + k, B + K)
2、(a + k, b - k)
接着输入p,q,r,s,表示输出的范围
题解
根据这两个数学公式可以推出两条斜率为1的直线与p,q,s,r围成的正方体中,其他的位置都不需要考虑,一道纯数学题,数学公式推导过程详见大佬的blog,可以推出当 i + j == a + b || i - j == a - b 时,输出'#',否则输出'.'
代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
#define ll long long
int main(){
ll a, b ,n;
ll p, q, r, s;
cin >> n >> a >> b;
cin >> p >> q >> r >> s;
for(ll i = p; i <= q; i++){
for(ll j = r; j <= s; j++){
if((i - j) == (a - b) || (i + j) == (a + b))
cout << '#';
else
cout << '.';
}
cout << endl;
}
}

浙公网安备 33010602011771号