CF-1358 C. Celex Update

Posted valk3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF-1358 C. Celex Update相关的知识,希望对你有一定的参考价值。

C. Celex Update

题意

有一个无限大的表格,按照某个方式填上数字。给出T个询问,每个询问

给出两个坐标((x1,y1),(x2,y2)),只能向下或者向右移动,问从第一个点移动

到第二个点,有多少种不同的路径和。

题解

直接猜的是,所有路径和都不相同。

写组合公式的时候,突然想到这个答案 有点大啊,题目也没有说取模。

脑子瓦特了,竟然写了交了,GG。

肯定会有重复的。

比如((1,1)->(3,3))

技术图片

1 2 5 9 13

1 3 5 8 13

这两条路径就是一样的,因为向下走比向右走会多1。

这样就可以抵消影响,使得和一样。

这时就大胆的猜,路径和最小值和路径和最大值之间是不是都可以取到。

在上一路径某个向右走的地方选择向下走,就可以使得路径和增加1。

所以都可以取到,答案就是最大值和最小值的差+1。

把两条路径的值的差依次写出来,1 2 3 4 ... x2-x1 x2-x1...4 3 2 1

数字总个数是x2-x1+y2-y1+1

求和(就是((x2-x1)*(y2-y1)))

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
typedef unsigned long long ull;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        int x=x2-x1,y=y2-y1;
        int n=x,m=x+y-1;
        ll ans=1LL*(n+1)*n;
        ans+=1LL*(m-2*n)*n;
        printf("%lld
",ans+1);
    }
    return 0;
}

以上是关于CF-1358 C. Celex Update的主要内容,如果未能解决你的问题,请参考以下文章

C. Celex Update (思维)

Codeforces Round #645 (Div. 2) C - Celex Update 思维

Codeforces Round #645 (Div. 2) C - Celex Update 思维

markdown Robert C. Martin的“清洁代码”摘要

markdown Robert C. Martin的“清洁代码”摘要

svn原理及服务配置