zoukankan      html  css  js  c++  java
  • 【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。

    (disx=x2-x1),(disy=y2-y1)(maxn=min(disx,disy))
    此时最大路径和最小路径 每个值的差值依次是(1,2,3,...,maxn-1,maxn,...,maxn,maxn-1,..,4,3,2,1)

    数字总个数是(x2-x1+y2-y1-1),即一条路径长度-2

    求和之后+1就是((x2-x1)*(y2-y1)+1)

    代码

    #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;
            printf("%lld
    ",1LL*x*y+1);
        }
        return 0;
    }
    
    
  • 相关阅读:
    Extjs常用的控件
    JasperReport导出
    spring配置连接池
    extjs中xtype类型

    凭什么!
    用心去做,多动脑思考
    闲着无事弄一下荒废已久的博客。。。

    视频下载工具 3.0
  • 原文地址:https://www.cnblogs.com/valk3/p/12979459.html
Copyright © 2011-2022 走看看