HDU 6336 Matrix from Arrays (杭电多校4E)
遇事不决先打表。
然后会发现(个屁)大的矩形是由一个2L*2L的矩形重复出现组成的然后我们就可以这个矩形分成四个点到(0, 0)点的矩形,这样问题就变成了求四个到顶点(0, 0)的矩形的面积,然后就先去求这里面完整的块数,然后去找边缘的有一边是完整的块,然后找最右下角的没有完整的块的面积,然后加起来就可了
#include<map> #include<set> #include<ctime> #include<cmath> #include<stack> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define lowbit(x) (x & (-x))typedef unsigned long long int ull; typedef long long int ll; const double pi = 4.0*atan(1.0); const int inf = 0x3f3f3f3f; const int maxn = 1e5+10; const int maxm = 10000007; const int mod = 1e9+7; using namespace std;int n, m, tol, T; int L; int A[15]; int M[100][100]; ll sx[30]; ll sy[30]; ll sum;void init() {sum = 0;memset(A, 0, sizeof A);memset(M, 0, sizeof M);memset(sx, 0, sizeof sx);memset(sy, 0, sizeof sy); }ll solve(int x, int y) {ll ans = 0;int cx = x/L;int cy = y/L;ll t = 1ll * cx * cy;ans += 1ll * t * sum;int x1 = x % L;int y1 = y % L;ll s = 0;for(int i=1; i<=x1; i++) s += sx[i];ans += s * cy;s = 0;for(int i=1; i<=y1; i++) s += sy[i];ans += s * cx;for(int i=1; i<=x1; i++) {for(int j=1; j<=y1; j++) {ans += M[i][j];}}return ans; }int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout);scanf("%d", &T);while(T--) {init();scanf("%d", &L);for(int i=0; i<L; i++) scanf("%d", &A[i]);int cursor = 0;for(int i=1; i<=4*L; i++) {for(int j=1; j<=i; j++) {M[j][i - j + 1] = A[cursor];cursor = (cursor + 1) % L;}}L <<= 1;for(int i=1; i<=L; i++) {for(int j=1; j<=L; j++) {sy[j] += M[i][j];sx[i] += M[i][j];}sum += sx[i];}/*for(int i=1; i<=L; i++) for(int j=1; j<=L; j++) printf("%d%c",M[i][j], j==L ? '\n' : ' \t');for(int i=1; i<=L; i++) printf("sx%d = %d\n", i, sx[i]);for(int i=1; i<=L; i++) printf("sy%d = %d\n", i, sy[i]);*/int q;scanf("%d", &q);while(q--) {int x1, y1, x2, y2;scanf("%d%d%d%d", &x1, &y1, &x2, &y2);x1++, y1++, x2++, y2++;ll ans = solve(x2, y2);ans -= solve(x1-1, y2);ans -= solve(x2, y1-1);ans += solve(x1-1, y1-1);printf("%lld\n", ans);}}return 0; }
View Code
转载于:https://www.cnblogs.com/Jiaaaaaaaqi/p/9413245.html
HDU 6336 Matrix from Arrays (杭电多校4E)相关推荐
- HDU 5734 Acperience (公式推导) 2016杭电多校联合第二场
题目:传送门. #include <iostream> #include <algorithm> #include <cstdio> #include <cs ...
- 杭电多校第七场 1011 Kejin Player HDU(6656)
杭电多校第七场 1011 Kejin Player 题意:给你N行,代表从i级有花费a[i]元的r[i]/s[i]的概率达到i+1级,剩下的概率中可能会到达x[i]级.然后询问从L级到R级的花费会是多 ...
- 2022杭电多校(四)
2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...
- 2019杭电多校 第七场 Kejin Player 6656(求期望值)
2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...
- 2021杭电多校补题——第一场
2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...
- 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)
[2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...
- 2022杭电多校(十)
2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...
- 2022杭电多校(九)
2022杭电多校(九) 文章目录 2022杭电多校(九) 一.比赛小结 二.题目分析及解法(基础题) 1001.Arithmetic Subsequence 1003.Fast Bubble Sort ...
- 2022杭电多校(二)
2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...
最新文章
- Pandas 中的这些函数/属性将被 deprecated
- 读写配置文件app.config
- golang中的base64
- python脚本设置环境变量_详解如何设置Python环境变量?
- asp.net 分布式应用开发
- php v-for=,Vue中v-for循环节点的实现代码
- linux添加硬盘不重启(vmware下或者虚拟机下面)
- 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
- SpringMvc-@ExceptionHandler
- 第四次作业:猫狗大战挑战赛
- VB 二进制数据读写实例
- PHP 入门学习教程及进阶(源于知乎网友的智慧)
- ##R语言生信作图之UpsetR做交集图
- RabbitMQ三种Exchange
- paip.项目文件同步-分支和合并总结V2012.9.23
- Window 消息大全使用详解
- 常用接口文档模板(markdown版)
- 电量分析 —— 优化耗电
- Linq的where语句中如果有两个条件以上的写法
- love2d教程10--粒子效果
热门文章
- PHP留言并展示_留言页面展示功能
- 华军java_Java SE Runtime Environment 8
- python打印对象地址_Python打印对象的全部属性
- 单片机的单个IO口可以发送数据吗_5分钟了解单片机数据、地址、控制总线结构...
- 试题14 回文数(详解)
- UnityShader9:光照基础回顾
- Unity3D之UGUI基础1:UGUI插件介绍
- hihocoder 1449 : 后缀自动机三·重复旋律6(后缀自动机)
- bzoj 3238: [Ahoi2013]差异(后缀数组+单调栈)
- js排序算法详解-归并排序