2022icpc 南京站 Stop, Yesterday Please No More - 二维差分

2023-11-07 16:04

本文主要是介绍2022icpc 南京站 Stop, Yesterday Please No More - 二维差分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题面

分析

题面很长,发现都是一些废话,最初不难想到可以先不看那个洞在哪,先进行处理,找出最后留下的袋鼠有多少,难点是接下来怎么操作能够来记录洞的移动,可以进行差分记录矩形的左上角位置,保证洞只会移动一次在一个位置,为了防止矩形出界,可以在第一次没有洞处理时,并不是真正模拟,只不过是消去相对的袋鼠,假如向上移动,那么第一行就会出界,所以相应操作就是删去第一行,类似这样,最后得到最终矩形,第二次就可以正常模拟,因为第一次模拟已经保证了不会出界,记录左上角的下标,最后通过对差分的统计,计算有多少个位置可以满足题意。

代码
#include <bits/stdc++.h>using namespace std;
using ll = long long;const int N = 1010;int b[N][N];
int vis[N][N];void insert(int x1, int y1, int x2, int y2) {b[x1][y1] ++;b[x2 + 1][y1] --;b[x1][y2 + 1] --;b[x2 + 1][y2 + 1] ++;
}void solve() {int n, m, k;cin >> n >> m >> k;memset(b, 0, sizeof b);memset(vis, 0, sizeof vis);string s;cin >> s;int u = 1;int l = 1;int r = m;int d = n;int U = u;int D = d;int R = r;int L = l;for(int i = 0; i < s.size(); i ++) {if(s[i] == 'U') U ++, D ++;else if(s[i] == 'D') D --, U --;else if(s[i] == 'L') L ++, R ++;else L --, R --;u = max(U, u);d = min(d, D);l = max(L, l);r = min(r, R);}int last = (d - u + 1) * (r - l + 1) - k;if(l > r || u > d) {if(k) cout << 0 << "\n";else cout << n * m << "\n";return ;}if(last < 0) {cout << 0 << "\n";return ;}insert(u, l, d, r);vis[u][l] = 1;for(int i = 0; i < s.size(); i ++) {if(s[i] == 'U') u --, d --;else if(s[i] == 'D') u ++, d ++;else if(s[i] == 'L') l --, r --;else l ++, r ++;//cout << u << ' ' << l << ' ' << d << ' ' << r << endl;if(vis[u][l]) continue;vis[u][l] = 1;insert(u, l, d, r);}for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) b[i][j] = b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1] + b[i][j];}int ans = 0;for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) {if(b[i][j] == last) ans ++;}}cout << ans << "\n";
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;while(T --) {solve();}
}

这篇关于2022icpc 南京站 Stop, Yesterday Please No More - 二维差分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/364743

相关文章

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

HDU 2159 二维完全背包

FATE 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

C语言批量数据到动态二维数组

上一篇文章将文件读取放到静态创建的二维数组中,但是结合网络上感觉到今天的DT时代,这样批量大量读取一个上百行的数据,分配的内存是否可能因为大量的数据而产生溢出呢,最近一直研究里malloc函数,通过它来动态建立所需的二维数组,因此,通过文件操作和动态创建二维数组结合起来,将大量的数据动态的放入矩阵中,不知道这样的思想是否正确,下午把程序运行出来了,将程序贴上来,欢迎大家一起探讨:对于有规律的大数据

Python中差分进化differential_evolution的调用及参数说明

在场景应用中,要求我们的函数计算结果尽可能的逼近实际测量结果,可转化计算结果与测量结果的残差,通过最小化残差,便可求出最优的结果。但使用最小二乘等方法来计算时,常常会使迭代的结果显然局部最优点而导致结算错误。 差分进化原理 差分进化(Differential Evolution,DE)是一种基于群体差异的进化算法,其计算思想主要包括以下几个方面: 一、初始化种群 首先,随机生成一个初始种群

HLJUOJ1118(二维树状数组)

1118: Matrix Time Limit: 4 Sec   Memory Limit: 128 MB Submit: 77   Solved: 12 [ Submit][ Status][ Web Board] Description 给定一个1000*1000的二维矩阵,初始矩阵中每个数都为1,然后为矩阵有4种操作. S x1 y1 x2 y2:计算(x1,y1)、(x2