[省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造。
我是没有想到的。
自己的思维能力可能还是不足。
考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\)。
接下来考虑对这个\(a\),矩阵进行一些行列加的操作满足\(\leq 1e6\)的性质。
考虑操作做时,奇偶分开加减这样的操作保证\(b\)的限制。
借用一下其他大佬的图。

如下代码因为被卡常了,所以在跑\(BellmanFord\)时没有跑完,所以其实并不保证正确性。只是能过数据而已,好无奈。
[省选联考 2021 A 卷] 矩阵游戏
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
ll N;
int n,m;
int a[4000][4000],b[4000][4000],cnt,head[100000];
ll dis[100000];
struct P{int s,to,next,v;}e[400000];
inline void clear(){cnt = 0;std::memset(head,0,sizeof(head));std::memset(dis,0x3f,sizeof(dis));}
inline void add(ll x,ll y,ll v){
// std::cout<<x<<" "<<y<<" "<<v<<std::endl;
e[++cnt].s = x;
e[cnt].to = y;
e[cnt].next = head[x];
e[cnt].v = v;
head[x] = cnt;
}
inline int read(){
int ans = 0;
char a = getchar();
while(a < '0' || a > '9')a = getchar();
while(a <= '9' && a >= '0')
ans = (ans << 3) + (ans << 1) + (a - '0'),a = getchar();
return ans;
}
inline void init(){
n = read(),m = read();
for(int i = 1;i <= n - 1;++i)
for(int j = 1;j <= m - 1;++j)
b[i][j] = read();
}
inline void st(){
for(int i = n;i >= 1;--i)
for(int j = m;j >= 1;--j)
a[i][j] = b[i][j] - a[i + 1][j] - a[i + 1][j + 1] - a[i][j + 1];
}
inline bool r(){
dis[1] = 0;
for(int i = 1;i <= n;++i){
for(int j = 1;j <= cnt;++j){
int s = e[j].s;
int t = e[j].to;
if(dis[t] > dis[s] + e[j].v)
dis[t] = dis[s] + e[j].v;
// std::cout<<s<<" "<<t<<" "<<dis[t]<<" "<<dis[s]<<" "<<e[j].v<<std::endl;
}
}
// for(int i = 1;i <= m + n;++i)
// std::cout<<dis[i]<<" ";
for(int j = 1;j <= cnt;++j){
int s = e[j].s;
int t = e[j].to;
if(dis[t] > dis[s] + e[j].v){
return false;
}
}
return true;
}
inline void putout(){
// for(int i = 1;i <= m + n;++i)
// std::cout<<dis[i]<<" ";
puts("YES");
// for(int i = 1;i <= n;++i,puts(""))
// for(int j = 1;j <= m;++j)
// std::cout<<a[i][j]<<" ";
for(int i = 1;i <= n;++i,puts(""))
for(int j = 1;j <= m;++j){
if(!((i + j) & 1))
a[i][j] = a[i][j] + dis[i] - dis[n + j];
else
a[i][j] = a[i][j] + dis[j + n] - dis[i];
std::cout<<a[i][j]<<" ";
}
}
inline void got(){
clear();
for(int i = 1;i <= n;++i){
for(int j = 1;j <= m;++j){
if(!((i + j) & 1))
add(i,j + n,a[i][j]),add(j + n,i,1000000 - a[i][j]);
else
add(j + n,i,a[i][j]),add(i,j + n,1000000 - a[i][j]);
}
}
// for(int i = 1;i <= m + n;++i)
// add(0,i,0);
if(!r())
puts("NO");
else
putout();
}
int main(){
scanf("%d",&N);
while(N -- ){
init();
st();
got();
}
}
[省选联考 2021 A 卷] 矩阵游戏的更多相关文章
- 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)
题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...
- 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)
洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\) 算法通过,因此可以考虑 \(\mathcal O(n^2 ...
- [省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...
- luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)
luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
- luoguP6623 [省选联考 2020 A 卷] 树(trie树)
luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...
- luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)
luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...
- 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)
题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...
- 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)
洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\) \(10^9\) 的时代了吗?落伍了落伍了/ ...
随机推荐
- Web前端安全之安全编码原则
随着Web和移动应用等的快速发展,越来越多的Web安全问题逐渐显示出来.一个网站或一个移动应用,如果没有做好相关的安全防范工作,不仅会造成用户信息.服务器或数据库信息的泄露,更可能会造成用户财产的损失 ...
- spring提供的可拓展接口
接口:SmartLifecycle(https://www.jianshu.com/p/7b8f2a97c8f5)
- 保护模式篇——TLB与CPU缓存
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- Tekton+Argocd实现自动化流水线
目录 什么是tekton 安装tekton 安装Dashboard Tekton提供的CRD 安装argocd 创建argocd 安装客户端 连接argocd server 创建App 集群中查看效果 ...
- 第32篇-解析interfacevirtual字节码指令
在前面介绍invokevirtual指令时,如果判断出ConstantPoolCacheEntry中的_indices字段的_f2属性的值为空,则认为调用的目标方法没有连接,也就是没有向Constan ...
- Noip模拟12 2021.7.12
T1 interval 亏得昨天晚上改掉了T3并且理解了单调栈,今天一扫这题目就知道要用啥了. 先预处理出以a[i]为最大值的最大左右区间.然后再将a[i]取%!!!是的,要不然会影响单调栈的使用.. ...
- IPv6(诞生原因、数据报格式、与IPv4的不同、地址表现形式、基本地址类型、IPv6与IPv4的过渡策略)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105297642 学习课程:<2019王道考研计算机网络> 学习目的 ...
- 面试官问:说说你对Java函数式编程的理解
常见的面试问题 总结一下,在Java程序员的面试中,经常会被问到类似这样的问题: Java中的函数式接口是什么意思? 注解 @FunctionalInterface 的作用是什么? 实现一个函数式接口 ...
- 滑动窗口的最大值 牛客网 剑指Offer
滑动窗口的最大值 牛客网 剑指Offer 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6 ...
- redis开外网访问
Redis: 注释掉bind 127.0.0.1可以使所有的ip访问redis 若是想指定多个ip访问,但并不是全部的ip访问,可以bind protected-mode no /etc/init.d ...