Solution - AGC060B
简要题意:在 \(n \times m\) 的方格表中填入一些不超过 \(2^k-1\) 的数。考虑所有从左上角到右下角的最短路径,要求其中满足路径上数异或和为 \(0\) 的路径只有给定的 \(S\) 一条,问是否有解。
首先,变换看问题的角度:给定 \(n,m,S\),则 \(k\) 应该存在一个最小值,使得问题有解(或总是无解),所以这其实是一个组合最值问题。那么考虑两个方面:证明和构造。
证明部分,我们要尽可能的增大 \(k\),也就是增大所需的二进制位数。那么,考虑 \(S\) 的一个拐角,如图,红线表示 \(S\),蓝线表示一个调整。

这里拐角指的是红线的拐弯处斜向相邻的这个格,即图中蓝线唯一不同与红线的格。
将红线换为蓝线之后,只改变了两个格,那么由于蓝线不能异或和为 \(0\),所以这两个格至少有一位二进制不同。
这样的调整可以在若干个地方进行,设为 \(t\) 个,第 \(i\) 个调整会使路径的异或和改变 \(v_i\)。那么,不能有若干个 \(v_i\) 的异或和为 \(0\),即 \(v_i\) 是一个线性无关组。由于 \(v_i\) 定义在 \(k\) 位二进制数上,所以 \(t \le k\)。
但是,并不是每个拐角都可以调整。准确地说,不是所有拐角都可以一起调整。请看下图:

图中标出了三个拐角,但是显然不能同时做 \(1,2\) 的调整,也不能同时做 \(1,3\) 的调整。再思考一下可以发现,其实只有这样的一种情况是特殊的,也就是有一段经过两格的,连续的若干个两格只取一侧。
如此就可以算出 \(k\) 的下界,它其实就是一条路径能够经过的拐角数目的最大值,只是对于连续的两格比较特殊。
至于构造,思考到这里应该不太难了。方案如下:(想象一个人在表格中走,Ta要做一些决策)
对于一段长度大于等于 \(3\) 的直走,取新的一位,在这一段两端各添一个 \(1\)。这样可以使得走到这一段开头后必须走这一段结尾。
对于一些长度为 \(2\) 的直走,不妨设第一个 \(2\) 是竖向的,那么给每一段竖向的分配一个二进制位,在这两个格上添 \(1\)。然后取消两端由上一条添的位。
似乎说的不太清楚?上图。

在第二条规则下,有一些“必经之路”会被挡住,所以必须要经过所有安排的 \(1\)。
容易验证这个构造确实取到了前面证明的最值。
AGC 传统,思路难,代码易。请看 Code:
#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,cnt,x,y,lstx,lsty;
//x,y跟着路径S跑
//lstx,lsty表示上一个选中的拐角
char s[65];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&k);
scanf("%s",s+1);
cnt=0;x=y=lstx=lsty=1;
for(int i=1;i<n+m-2;i++){
if(s[i]=='D')x++;else y++;
if(s[i]!=s[i+1]){
if(s[i]=='D'&&lstx<=x-1&&lsty<=y+1)
cnt++,lstx=x-1,lsty=y+1;
if(s[i]=='R'&&lstx<=x+1&&lsty<=y-1)
cnt++,lstx=x+1,lsty=y-1;
}
}
printf(cnt<=k?"Yes\n":"No\n");
}
return 0;
}
Solution - AGC060B的更多相关文章
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...
- Windows 10 部署Enterprise Solution 5.5
Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...
- Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化
Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...
- Dynamics CRM 2015-超大Solution导入问题
我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...
- WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION
开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...
- Codility NumberSolitaire Solution
1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...
- codility flags solution
How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...
- The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C
Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...
- The Solution of UESTC 2016 Summer Training #1 Div.2 Problem B
Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/B Description standard input/output Althou ...
随机推荐
- 【Nginx】如何使用自签CA配置HTTPS加密反向代理访问?看了这篇我会了!!
写在前面 随着互联网的发展,很多公司和个人越来越重视网络的安全性,越来越多的公司采用HTTPS协议来代替了HTTP协议.为何说HTTPS协议比HTTP协议安全呢?小伙伴们自行百度吧!我就不说了.今天, ...
- 使用vott对车牌位置进行标注
1.软件安装 vott 下载地址 https://github.com/microsoft/VoTT/releases 双击vott-2.2.0-win32.exe安装标注软件,安装成功后桌面会生成应 ...
- KingbaseES V8R6 集群环境备库不结束旧事务快照将影响主库的vacuum操作
前言 昨天同事遇到了一个有关vacuum的典型问题. V8R6读写分离集群环境,一主多备. 版本:kingbaseesv008r006c004 问题现象: 主库日常巡检发现日志大量记录: waring ...
- 带你玩转OpenHarmony AI:打造智能语音子系统
简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的.智能家居.智慧厨房.智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称 ...
- Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
使用 SSH 密钥对的 Git 安全远程访问:生成.添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制.在使用 SSH 连接到远程 Git 存储 ...
- 【C#上位机】西门子1200PLC实用定位控制程序案例
1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...
- std::thread 二:互斥量(lock() & unlock())
mutex 互斥量的作用是保护共享数据 *:有 lock() 就一定要有 unlock() #include <iostream> #include <thread> # ...
- Redis Pipelining 底层原理分析及实践
作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务.在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性 ...
- Blocks—单调栈
思路: 题目意思是求平均数>=k的最长序列先求出a[i]-k的前缀和就是求sum[i]-sum[j]>=0的最大i-j当j<=k<=isum[j]<=sum[k]j< ...
- 重新点亮shell————awk 控制语句[十三]
前言 简单介绍一下控制语句. 正文 例子1: 例子2: 例子3 for循环: 例子4, sum会复用: 同样,其他的while 和 do while 也是可以在awk中使用的. 结 下一节awk数组.