D. Grid-00100(构造啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
发布日期:2021-06-30 10:17:42 浏览次数:2 分类:技术文章

本文共 1417 字,大约阅读时间需要 4 分钟。

答 案 计 算 是 ( 最 大 行 和 − 最 小 行 和 ) 2 + ( 最 大 列 和 − 最 小 列 和 ) 2 答案计算是(最大行和-最小行和)^2+(最大列和-最小列和)^2 ()2+()2

说实话,看到这个答案计算方式我头都是痛的,完全看不出什么

不如,先考虑答案为0的时候

也 就 是 说 每 一 行 的 1 都 相 等 , 每 一 列 的 1 都 相 等 也就是说每一行的1都相等,每一列的1都相等 1,1

你 看 看 这 种 构 造 方 式 如 何 ? 每 行 每 列 都 是 3 个 1 你看看这种构造方式如何?每行每列都是3个1 ?31

第 i 行 从 第 i 个 开 始 放 置 连 续 的 k / n 个 1 第i行从第i个开始放置连续的k/n个1 iik/n1

很 明 显 , 这 样 构 造 要 满 足 一 个 条 件 , k 能 整 除 n 才 行 很明显,这样构造要满足一个条件,k能整除n才行 ,,kn

k不能整除n时怎么办?

此 时 不 论 如 何 都 不 能 使 每 行 1 个 数 相 等 , 也 不 能 使 每 列 相 等 \color{Red}此时不论如何都不能使每行1个数相等,也不能使每列相等 使1,使

因 为 假 设 行 ( 列 ) 间 相 等 , 设 每 行 ( 列 ) 有 s 个 1 , 那 么 s n = k \color{Red}因为假设行(列)间相等,设每行(列)有s个1,那么sn=k (),()s1,sn=k

然 而 k 是 不 整 除 n 的 , 所 以 行 和 列 都 会 至 少 相 差 1 个 \color{Red}然而k是不整除n的,所以行和列都会至少相差1个 kn,1

那 么 答 案 最 优 是 1 2 + 1 2 = 2 , 幸 运 的 是 我 们 仍 然 很 容 易 构 造 出 来 那么答案最优是1^2+1^2=2,幸运的是我们仍然很容易构造出来 12+12=2,

这 时 候 怎 么 构 造 ? 设 k % n = y u 这时候怎么构造?设k\%n=yu ?k%n=yu

构 造 方 式 和 前 面 一 样 , 只 不 过 前 y u 行 多 放 置 1 个 1 构造方式和前面一样,只不过前yu行多放置1个1 ,yu11

这 样 可 以 保 证 行 最 多 和 行 最 少 只 相 差 1 个 1 , 列 同 理 这样可以保证行最多和行最少只相差1个1,列同理 11,

#include 
using namespace std;const int maxn=302;int n,k,t,a[maxn][maxn];int main(){ cin >> t; while(t--) { cin >> n >> k; int yu=k%n,s=k/n; if(yu==0) cout<<0<

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107076412 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Codeforces Round #654 (Div. 2)(A-D看不懂请来打我)
下一篇:B. Magical Calendar(数学计数,图解)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月25日 07时54分19秒