题意
某只同学在生日宴上得到了一个N×N玻璃棋盘,每个单元格都有灯。每一秒钟棋盘会有一个单元格被点亮然后熄灭。棋盘中的单元格将以图中所示的顺序点亮。每个单元格上标记的是它在第几秒被点亮。
思路
每行1,4,9,16,25…..
然后判断顺序
代码
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
void solve ( ll s ) {
ll x = ceil ( sqrt ( s ) );
bool flag = false;
// x奇数,下到左
if ( x & 1 )
flag = true;
ll mid = x * x - ( x - 1 );
// ( x, x )
if ( ( s < mid && flag ) || ( s > mid && !flag ) ) {
// ( x, ( x - ( mid - s ) ) )
printf ( "%lld %lld\n", x, ( x - abs ( mid - s ) ) );
} else {
// ( x - ( mid - s ), x )
printf ( "%lld %lld\n", ( x - abs ( mid - s ) ), x );
}
}
int main () {
int T;
scanf ( "%d", &T );
for ( int ks = 1; ks <= T; ++ks ) {
ll s;
scanf ( "%lld", &s );
printf ( "Case %d: ", ks );
solve ( s );
}
return 0;
}