首页 > 其他分享 >差分和前缀和

差分和前缀和

时间:2024-02-28 11:48:03浏览次数:18  
标签:前缀 y1 int 差分 nextInt 棋子 sc y2

蓝桥杯第14届中的一道题所学:题目描述
小蓝拥有 n × n 大小的棋盘,一开始棋盘上全都是白子。小蓝进行了 m 次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反 (也就是白色棋子变为黑色,黑色棋子变为白色)。请输出所有操作做完后棋盘上每个棋子的颜色。

输入格式
输入的第一行包含两个整数 n, m,用一个空格分隔,表示棋盘大小与操作数。

接下来 m 行每行包含四个整数 x1, y1, x2, y2,相邻整数之间使用一个空格分隔,表示将在 x1 至 x2 行和 y1 至 y2 列中的棋子颜色取反。

输出格式
输出 n 行,每行 n 个 0 或 1 表示该位置棋子的颜色。如果是白色则输出 0,否则输出 1 。

样例输入
3 3
1 1 2 2
2 2 3 3
1 1 3 3
样例输出
001
010
100

单纯遍历去修改很明显超时,看解析了解到差分和前缀和联合起来求解。

对于二维

根据本题感觉应该是看成左上角顶点和(右上后面,左下下面,右下斜下)这些去标记。前缀和就是+=前面+上面-斜上

 1 import java.util.Scanner;
 2 public class Main {
 3     
 4     static int[][] mp;
 5     
 6     public static void main(String[] args) {
 7         Scanner sc = new Scanner(System.in);
 8         int n = sc.nextInt(),m = sc.nextInt();
 9         mp = new int[n + 5][n + 5];
10         
11         while((m--) != 0) {
12             int x1 = sc.nextInt();
13             int y1 = sc.nextInt();
14             int x2 = sc.nextInt();
15             int y2 = sc.nextInt();
16             deal_mp(x1,y1,x2,y2);
17         }
18         pre_sum(n);
19         
20         for(int i = 1; i <= n; ++i) {
21             for(int j = 1; j <= n; ++j) {
22                 if((mp[i][j] & 1) == 0)
23                     System.out.print(0);
24                 else System.out.print(1);
25             }
26             System.out.println();
27             
28         }
29         
30     }
31     
32     private static void pre_sum(int n) {
33         for(int i = 1; i <= n; ++i)
34             for(int j = 1; j <= n; ++j)
35                 mp[i][j] +=  mp[i][j - 1] + mp[i - 1][j] - mp[i - 1][j - 1];
36         
37     }
38 
39 
40     private static void deal_mp(int x1, int y1, int x2, int y2) {
41         mp[x1][y1]++;
42         mp[x1][y2 + 1]++;
43         mp[x2 + 1][y1]++;
44         mp[x2 + 1][y2 + 1]++;
45     }
46 
47 }

 

标签:前缀,y1,int,差分,nextInt,棋子,sc,y2
From: https://www.cnblogs.com/saucerdish/p/18039832

相关文章

  • 前缀和算法
    一、简析前缀和有一系列元素\(A[a_0,~a_1,~...,~a_n,~...]\),前缀和\(pre\_sum[n]=A[0]+A[1]+···+A[n]\)。利用前缀和,我们可以很高效地得到\([L,~R]\)的区间和\(\sum_{i=L}^{R}A[i]=pre\_sum[R]-pre\_sum[L-1]\)。二、相关问题2.1题目简述P8649[蓝桥杯2017省B]......
  • 差分约束
    解决形如$a_i\lex_i-y_i\leb_i$的不等式组,其中$a_i,b_i$是给定的常数。我们尝试连接边通过$\operatorname{spfa}$解决。连接以下两条边,跑最短路。$$\Large{x_i\overset{-a_i}{\to}y_i}$$$$\Large{y_i\overset{b_i}{\to}x_i}$$例题:[P7515](https://www.luogu.com.c......
  • 基于MCU的差分增量FOTA升级可用方案记录
    差分FOTA优点:占用空间小,非常适合用于lora,nbiot等慢速低数据量的升级用,相比全量升级的传输大小空间基本都有量级的节省。缺点:生产差分文件时需要基于上一版本,前后版本差异太大有的差分fota算法并不能很好的差分。难点:mcu一般flash空间和ram空间都很小,开源的大部分早期基本都是......
  • 【算法】007_前缀树和贪心算法
    1.前缀树一个字符串类型的数组arr1,另一个字符串类型的数组arr2.arr2中有哪些字符,是arr1中出现的?arr2中有哪些字符是作为arr1中某个字符串前缀出现的?arr2中有哪些字符是作为arr1中某个字符串前缀出现的?pass:表示当前这个结点被经过的次数end:这个结点作为结尾的次数例如......
  • HydroOJ 从入门到入土(13)批量修改题号前缀
    题库的管理,无论是用前缀来分组,还是用域来分组,都有不好管理的地方,尤其是题号。有的时候导入了一堆题,导入完发现题号不是自己想要的,但删起来很麻烦,一个一个改更不现实,真是欲哭无泪。本文主要记录了一次批量修改题号前缀的过程,仅供参考。修改中涉及数据库操作,修改前一定要现在虚......
  • 高维前缀和(SOS DP)
    高维前缀和(SOSDP)通常求二维前缀和,用容斥来求但其实,完全可以先做一遍行的前缀和,再做一遍列的前缀和拓展到\(k\)维也是如此,可以在\(O(nk)\)的复杂度求前缀和但怎么和DP扯上关系?可以把第\(i\)维当作阶段,每一维的具体信息是状态先枚举阶段,表示当前固定其它维,只统计这一......
  • leetcode——数组算法——前缀和构建和应用
    leetcode——数组算法——前缀和构建和应用前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和303.区域和检索-数组不可变比如leetcode303.区域和(检索-数组不可变)题目介绍:给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left......
  • Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、贪心)
    目录题面链接题意题解代码总结题面链接C.LittleGirlandMaximumSum题意给q个[l,r]将所有这些区间里面的数相加和最大。可以进行的操作是任意排列数组题解对出现的每个区间内的位置加上1,代表权值操作完之后求一遍前缀和,得到每个位置的权值然后贪心的考虑,权值越大,应......
  • 负环与差分约束
    1.负环负环是指一个环的边权值之和为负数。有负环的图没有最短路。要判断一个图是否有负环,一般使用Bellman-Ford算法或SPFA算法。Bellman-Ford如果一个图没有负环的话,最短路径最多会经过\(N-1\)条边。如果有,那么在进行\(N\)次更新后还能继续更新。于是用Bellman-F......
  • 差分约束算法
    一、题目描述P5960【模板】差分约束二、题目简析差分约束问题的典型特征是一组不等式。只要画出约束图,这类问题都可以准换为最短路径问题。注意:约束图是有向图。2.1约束图的顶点约束图的顶点(\(V\))=一个未知数对应一个顶点(\(v_1,v_2,...,v_n\))+一个额外的顶点(\(v_0\)......