1358C - Celex Update

链接:

https://codeforces.com/problemset/problem/1358/C

题意:

一个特殊无限矩阵(看题),求从( x1 , y1 )到( x2 , y2 )有几种不同的路径和

img

解:

标签就一个math

只能是半猜半蒙~~(bushi)~~

首先,每一步的选择上只有右和下

选择下的话对于选择右路径和小1

观察( 1 , 1 )到( 3 , 3 )

1 2 4
3 5 8
6 9 13

有以下几条路径

  1. 1+2+4+8+13=28
  2. 1+2+5+8+13=29
  3. 1+2+5+9+13=30
  4. 1+3+5+8+13=30
  5. 1+3+5+9+13=31
  6. 1+3+6+9+13=32

一共五种不同路径和,而且最大值32和最小值28和其间所有数都存在

可以发现,最小值是先向右到底后再向下

最小值+1是在倒数第2(1+1)列先向下一次//29

最小值+2是在倒数第2(1+1)列先向下两次,或者在倒数第3(2+1)列先向下一次//30

最小值+3是在倒数第3(2+1)列先向下一次,再在倒数第2(1+1)列先向下一次//31

最小值+4是在倒数第3(2+1)列直接向下两次//32

**但是!!!**上面这点我们只要知道就行

假设最小值路径为x,在x-n的位置向下m次的路径和为x+(n-1)*m~~(大概)~~

所以最大值和最小值差为(n-1)*m,当m为( y2 - y1 )【行差】,n-1为( x2 -x1)【列差】;

可得,路径和的数量==路径和最大值-路径和最小值+1

公式:(abs(x1-x2))*(abs(y1-y2))+1

PS:如此,要证明最大值和最小值其间所有数都存在

很简单,(n-1)*m的组合满足最大值-最小值的差值,所以其间所有数都存在

实际代码:

#include<iostream>
#include<cmath>
using namespace std;
typedef long long int ll;
int main()
{
	ll t;
	cin>>t;
	for(int f=1;f<=t;f++)
	{
		ll x1,y1,x2,y2;
		cin>>x1>>y1>>x2>>y2;
		//cout<<(x1-x2)<<" - "<<(y1-y2)<<endl;
		cout<<(abs(x1-x2))*(abs(y1-y2))+1<<endl; 
	}
}

限制:

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值