C. Infinity Table

https://codeforces.com/contest/1560/problem/C
在这里插入图片描述
INPUT

7
11
14
5
4
1
2
1000000000

OUTPUT

2 4
4 3
1 3
2 1
1 1
1 2
31623 14130

题意
看图应该能理解图内数的排列规律(就每次沿一个右上角正方形扩张)然后给出一个数,求出该数在图的第几行第几列

做法
先找出该数内的最大正方形,然后就从列开始数,如果列超出了最大正方形的边长,就稍微更改一下行列输出即可

下面拿个举例 : 8
在这里插入图片描述
所以我设cnt从1开始遍历,然后直到cnt * cnt(边长的平方代表面积内含的数)大于8,即cnt = 2.
所以8内最大正方形为 2×2.然后将8 - (cnt * cnt)即剩下的数,然后从x轴为cnt + 1开始遍历下去y值,
当剩下的数大于cnt + 1(在列中装不完)所以y轴固定为cnt + 1,反向从x轴cnt+1开始数x轴上的位置。

AC代码
ps:13行中 cnt * 2 - n 是化简后的 ,原式为cnt - (n - cnt ) ε=ε=ε=┏(゜ロ゜;)┛

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int T,n;cin>>T;
	while(T--)
	{
		cin>>n;
		int cnt = 1;
		while(cnt * cnt < n) {	cnt++;	}	
		n -= (cnt - 1) * (cnt - 1);
		if(n <= cnt)	cout<<n<<" "<<cnt<<endl;
		else	cout<<cnt<<" "<<cnt * 2 - n<<endl;	
	}
	return 0;
}

如果有问题尽情提出哈

几句牢骚
暑假培训后咸鱼了两周,现在开始补cf,发现连1200分的题切得都有点吃力 orz
假期的st表,树状数组,线段树,各种数据结构感觉都还给学长了,得好好补题了
暑期选拔进集训队还是很nice的

ε=ε=ε=┏(゜ロ゜;)┛

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值