Link

简要题意:在 \(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要做一些决策)

  1. 对于一段长度大于等于 \(3\) 的直走,取新的一位,在这一段两端各添一个 \(1\)。这样可以使得走到这一段开头后必须走这一段结尾。

  2. 对于一些长度为 \(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的更多相关文章

  1. 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 数据库 ...

  2. Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架

    Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...

  3. Windows 10 部署Enterprise Solution 5.5

    Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...

  4. Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化

    Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...

  5. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

  6. WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION

    开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...

  7. Codility NumberSolitaire Solution

    1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...

  8. codility flags solution

    How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...

  9. 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 ...

  10. 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 ...

随机推荐

  1. 【Nginx】如何使用自签CA配置HTTPS加密反向代理访问?看了这篇我会了!!

    写在前面 随着互联网的发展,很多公司和个人越来越重视网络的安全性,越来越多的公司采用HTTPS协议来代替了HTTP协议.为何说HTTPS协议比HTTP协议安全呢?小伙伴们自行百度吧!我就不说了.今天, ...

  2. 使用vott对车牌位置进行标注

    1.软件安装 vott 下载地址 https://github.com/microsoft/VoTT/releases 双击vott-2.2.0-win32.exe安装标注软件,安装成功后桌面会生成应 ...

  3. KingbaseES V8R6 集群环境备库不结束旧事务快照将影响主库的vacuum操作

    前言 昨天同事遇到了一个有关vacuum的典型问题. V8R6读写分离集群环境,一主多备. 版本:kingbaseesv008r006c004 问题现象: 主库日常巡检发现日志大量记录: waring ...

  4. 带你玩转OpenHarmony AI:打造智能语音子系统

    简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的.智能家居.智慧厨房.智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称 ...

  5. Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析

    使用 SSH 密钥对的 Git 安全远程访问:生成.添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制.在使用 SSH 连接到远程 Git 存储 ...

  6. 【C#上位机】西门子1200PLC实用定位控制程序案例

    1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...

  7. std::thread 二:互斥量(lock() & unlock())

    mutex  互斥量的作用是保护共享数据 *:有 lock()  就一定要有  unlock() #include <iostream> #include <thread> # ...

  8. Redis Pipelining 底层原理分析及实践

    作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务.在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性 ...

  9. Blocks—单调栈

    思路: 题目意思是求平均数>=k的最长序列先求出a[i]-k的前缀和就是求sum[i]-sum[j]>=0的最大i-j当j<=k<=isum[j]<=sum[k]j< ...

  10. 重新点亮shell————awk 控制语句[十三]

    前言 简单介绍一下控制语句. 正文 例子1: 例子2: 例子3 for循环: 例子4, sum会复用: 同样,其他的while 和 do while 也是可以在awk中使用的. 结 下一节awk数组.