B. Restoring Painting CodeForces - 675B

原题链接 位于CodeForcesicon-default.png?t=M1L8https://codeforces.com/problemset/problem/675/B

翻译

小 V 在玩填数游戏,游戏在 3×3 的正方形中进行。

  • 9 个格子中的数字都为 1∼n 的整数,不同格子中的数字可以相同。
  • 正方形可以划分出 4 个 2×2 的小正方形,这四个正方形中的数之和相同。
  • 如图所示,a, b, c, d 的值是已知的。


 
现在 小 V 想知道,剩下的 5 个数一共有多少种填法。

题意及思路

可以很容易得到,四周数字的填写与中间数字无关,因而我们枚举中间数 e 为1~n

所以可以知道每次枚举e时,a,b,c,d,e是固定值,因而四周数的相对差是相同的

所以根据n的大小得出四周数的范围,因为四个方块的和相同,则与:a+b, a+c, b+d, c+d有关

经过分析,四周数的范围与其中的 最大值max 与 最小值min 有关

范围大小是最大和减最小和加一,可以得出每次枚举的四周数范围为n-(max-min+1)+1

因为我们知道当差值过大以至于大于n时没有答案,所以每次枚举结果为max(n-(max-min+1)+1, 0)

因为枚举中间数, 所以次数即为n,答案为 n * max(n-(max-min+1)+1, 0)

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int i, j, t;
	int a, b, c, d;
	long long n;

	scanf("%lld%d%d%d%d", &n, &a, &b, &c, &d);
	int xmax = max(max(a+b, a+c),max(b+d, c+d));
	int xmin = min(min(a+b, a+c),min(b+d, c+d));
	printf ("%lld", n * max<long long>(n - (xmax - xmin + 1) + 1, 0));
                        // 此处需用“longlong的max”,因为答案包含longlong数

	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值