首页 > 其他分享 >CF249题解

CF249题解

时间:2023-12-01 15:23:03浏览次数:34  
标签:ch CF249 题解 sum squ leq ans ll

CF249

link

CF249E

link

CF249E题意

给你一个形如下图的矩阵

并有 \(T\) 组询问 每组询问给出 \(x_1,y_1,x_2,y_2\)。

求 \(\sum_{i=x_1}^{x_2}\sum_{j=y_1}^{y_2}A[i][j]\)。

其中 \(A[i][j]\) 表示在矩阵中的数。

\(T\leq 10^5\)
\(1\leq x_1 \leq x_2 \leq 10^9\)
\(1\leq y_1 \leq y_2 \leq 10^9\)

CF249E题解

首先先将询问拆成 \((x_2,y_2)-(x_1-1,y_2)-(x_2,y_1-1)+(x_1-1,y_1-1)\)。
然后现在考虑怎么求 \((1,1)\to (x,y)\) 的总和。
首先知道一个结论,就是 \((1,y)=((y-1)^2+1),(x,1)=x^2\)。
设 \(n=\min(x,y)\),现在知道了 \((1,1)\to(n,n)\) 的答案是 \(\frac{n^2\times(n^2+1)}{2}\)。
这里不妨设 \(sum(n)=\sum_{i=1}^n,squ(n)=\sum_{i=1}^ni^2\)。
然后分类讨论剩下的:

  • \(x>y\),观察图形,可知每一行都是从最左侧开始递减,每次递减一。
    • 先算递减一的代价,每一行的递减总和是 \(sum(y-1)\),一共 \(x-y\) 行,所以对答案的贡献是 \(-sum(y-1)\times (x-y)\)。
    • 然后算剩下的,每一列的答案都是 \(squ(x)-squ(y)\),总和就是 \((squ(x) -squ(y))\times y\)。
  • \(x<y\),同样观察图形,可知每一列都是从最上面开始递增,每次递增一。
    • 先算递增一的贡献,每一列的递增总和是 \(sum(y)\),一共 \(y-x\) 行,所以对答案的贡献是 \(sum(y)\times (y-x)\)。
    • 然后算剩下的,每一行的答案都是 \(squ(y - 1) - squ(x - 1)\),总和就是 \((squ(y - 1) -squ(x-1))\times x\)

哦对了中间的答案最大不会超过 \(n^4\),__int128可以驾驭,但long long好像不太行。
大水题快来切啊(bushi)

CF249E代码

#include<bits/stdc++.h>
#ifndef ONLINE_JUDGE
#define __int128 long long
#endif
#define i128 __int128
#define ll long long
using namespace std;
inline ll read(){
    ll x = 0, f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
    return x * f;
}

inline i128 summ(i128 x){return (x + 1) * x / 2;}
inline i128 squu(i128 x){return x * (x + 1) * (2 * x + 1) / 6;}

i128 solve(i128 x,i128 y){
    if(x <= 0 || y <= 0)return 0;
    i128 n = min(x, y);
    i128 ans = summ(n * n);
    if(x > y){
        ans -= (x - y) * summ(y - 1);
        ans += (squu(x) - squu(y)) * y;
    }
    else if(x < y){
        ans += (y - x) * summ(x);
        ans += (squu(y - 1) - squu(x - 1)) * x;
    }
    return ans;
}

signed main(){
int T = read();
while(T--){
    ll xl = read(), yl = read(), xr = read(), yr = read();
    i128 ans = solve(xr,yr) - solve(xl - 1,yr) - solve(xr,yl - 1) + solve(xl - 1,yl - 1);
    if(ans > (i128)1e10){ans = ans % (i128)1e10;printf("...%010lld\n",(ll)ans);}
    else printf("%lld\n",(ll)ans);
}
    // printf("%lld\n",(ll)solve(1,3));
    return 0;
}

标签:ch,CF249,题解,sum,squ,leq,ans,ll
From: https://www.cnblogs.com/Call-me-Eric/p/17869763.html

相关文章

  • P7110 晚秋绝诗 题解
    好有意思的题目啊。出题人太厉害了。思路考虑一个结论:我们将两个没插旗的点与中间的点称为一段,其中中间的点必须全部插旗。那么这一段如果已知两座山的高度,就一定可以得知所有的高度。考虑为什么。加入这一段是\(a\simb\)。\[\begin{cases}h_a+h_{a+2}=2\timesh_{a+1}......
  • Advent of Code 2023题解 [Mathematica/Python]
    Day1Part1(*读取文件*)lines=ReadList["E:\\ExplorerDownload\input.txt",String];(*计算校准值*)calibrationValues=ToExpression[StringJoin[#[[1]],#[[-1]]]]&/@(StringCases[#,DigitCharacter]&/@lines);(*打印总和*)Pri......
  • CF1198题解
    CF1198CodeforcesRound576(Div.1)CF1198AlinkCF1198A题意有一种数字化一段录音的常用方式,是记录每一个时刻的强度值。这些非负的强度值就可以代表一段音频对于一段音频,若有\(K\)个不同的强度值,那么每一位我们都需要\(k=\lceil\log_2K\rceil\)\(\text{bit}\)来存......
  • [AGC052B] Tree Edges XOR 题解
    题目链接点击打开链接题目解法怎么感觉这场\(B\)比\(C\)思维量更大考虑一步很妙的操作:把边权变成点权,以达到简化操作的目的使每条边的边权为两端点的异或和,手画一下可以发现,操作简化成了交换两端点的点权我们定义\(d_{1/2,i}\)定义为在\(1/2\)树上,\(i\)到根的权值......
  • CF1684题解
    CF1684CodeforcesRound792(Div.1+Div.2)CF1684AlinkCF1684A题意有一个用十进制表示的没有前导零的正整数\(n\)。Alice和Bob正在用这个数玩一个游戏。Alice先手,他们轮流进行游戏。在她的这一轮中,Alice应该交换这个数中的任何不同位置的两位。轮到Bob时,他每次......
  • [AGC052C] Nondivisible Prefix Sums 题解
    题目链接点击打开链接题目解法好题!一个序列是不合法的,必定满足某些结论,我们不妨猜测一下首先如果和为\(P\)的倍数,必定不合法然后手玩几个可以发现,最极限的情况是\(P-1\)个\(1\;+\;\)\(b_i\;+\;\)\(P-b_i\)如果在这个情况下再加一个\(1\),就爆了其中\(1\)可以替......
  • CF689题解
    CF689CodeforcesRound361(Div.2)CF689AlinkCF689A题意题目描述迈克在海滩游泳时不小心将手机放入水中。他买了一个带有老式键盘的手机。键盘只有十个数字大小的键,位于以下方式:1234567890联系人与他的旧手机一起消失了,他现在只能记住他的手指......
  • 商家转账到零钱全攻略:开通、使用、区别与常见问题解答
    一、商家转账到零钱功能介绍微信作为中国最受欢迎的社交平台之一,其支付功能也相当强大。其中,商家转账到零钱功能可以让商家直接将款项转入用户的微信零钱,方便快捷。本文将详细介绍商家转账到零钱的功能、开通条件、使用方法以及常见问题解答。二、商家转账到零钱场景说明商家转......
  • axios(ajax)发送请求响应码200,但获取不到数据,无法加载响应数据: No datafound for res
    问题截图:没有响应数据控制台报错其实是由于浏览器的跨域资源共享(CORS)策略导致,前后端跨域请求是不行的。什么是域,看页面的url,比如https://www.baidu.com/下的网页都是属于baidu.com这个域。如果你是和我一样是从本地文件打开html的方式来调试ajax,那么一定会出现这个问题,因为本......
  • CF1846E2 Rudolf and Snowflakes (hard version) 题解
    题意:\(T\)\((\)\(1\)\(\le\)\(T\)\(\le\)\(10^4\)\()\)组询问:是否存在一个满\(k\)(\(k\)\(\ge\)\(2\)\()\)叉树节点数恰好为\(n\)\((\)\(1\)\(\le\)\(n\)\(\le\)\(10^{18}\)\()\),且深度\(depth\)至少为\(2\)。思路:满$k$......