[cf1261E]Not Same
问题可以这么理解——
构造一个$n+1$行$n$列的01矩阵$A$,满足:
1.第$i$列$n+1$个数的和为$a_{i}$
2.任意两行不完全相同
(对应关系:第$i$行第$j$列为1当且仅当第$i$次操作的集合包含$j$)
不妨将$a_{i}$从大到小排序,即$a_{1}\ge a_{2}\ge ...\ge a_{n}$,此时构造方案:
初始矩阵为0,$\forall 1\le i\le n$将第$i$列从第$i$行开始(包括第$i$行),下面$a_{i}$行填1(若行号大于$n+1$,则从第1行开始)
关于这一策略的正确性,即证明如此构造的矩阵$A$满足之前的两个条件:
对于第1个条件,由于$1\le a_{i}\le n$,显然成立
对于第2个条件,任取$i$和$j$(其中$1\le i<j\le n+1$),来证明第$i$行和第$j$行不完全相同——
取$(i,j]$中最小的$k$,满足$a_{k}+k>n+1$,对$k$分类讨论——
(1)不存在这样的$k$,必然有$a_{j}+j\le n+1$,此时$A_{i,j}=0$而$A_{j,j}=1$
(2)$k=i+1$,此时$A_{i,i+1}=0$而$A_{j,i+1}=1$
(3)不为以上两种情况,那么$a_{k-1}+(k-1)\le n+1$(否则显然取$k-1$)
注意到$a_{k-1}\ge a_{k}$,即$a_{k-1}+(k-1)+1\ge a_{k}+k$,前者$\le n+2$,后者$>n+1$,即两者都为$n+2$,也即$a_{k-1}+(k-1)=n+1$,此时$A_{i,k-1}=0$而$A_{j,k-1}=1$
综上,即得证
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 pair<int,int>a[N];
5 int n,ans[N][N];
6 int main(){
7 scanf("%d",&n);
8 for(int i=1;i<=n;i++){
9 scanf("%d",&a[i].first);
10 a[i].first*=-1;
11 a[i].second=i;
12 }
13 sort(a+1,a+n+1);
14 for(int i=1;i<=n;i++){
15 int x=a[i].second;
16 for(int j=i;j<i-a[i].first;j++)
17 if (j<=n+1)ans[j][x]=1;
18 else ans[j-(n+1)][x]=1;
19 }
20 printf("%d\n",n+1);
21 for(int i=1;i<=n+1;i++){
22 for(int j=1;j<=n;j++)printf("%d",ans[i][j]);
23 printf("\n");
24 }
25 }
[cf1261E]Not Same的更多相关文章
随机推荐
- 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...
- 单体应用 适合采用 dapr 构建吗?
缘起今天在微信群里有同学问 "纯.net 项目,有必要上dapr吗?" 当时不假思索的说不是微服务没必要,其他群友也说没必要.下午细想了一下,觉得这个和微服务没有关系,如果我的应用 ...
- springcloud整合config组件
config组件 config组件支持两种配置文件获取方式springcould搭建的微服务的配置文件的获取方式有两种.它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中或者本地 ...
- 更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...
- Linux常用命令查看文件、别名、切换目录、创建目录、查看当前目录
一.创建条件(使用liunx常用命令): 1.查看阿里云的环境是否搭建完成 首先快捷键 win+R 输入cmd 回车,打开命令提示符输入命令 ssh,回车. 2.登录阿里云账户 输入命令格式:ssh ...
- 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...
- 【c++ Prime 学习笔记】第13章 拷贝控制
定义一个类时,可显式或隐式的指定在此类型对象上拷贝.移动.赋值.销毁时做什么.通过5种成员函数实现拷贝控制操作: 拷贝构造函数:用同类型的另一个对象初始化本对象时做什么(拷贝初始化) 拷贝赋值算符:将 ...
- 敏捷 Scrum Master 的難點
什麼是 Scrum Master? Scrum master 是一個團隊角色,負責確保團隊遵守敏捷方法和原則並符合團隊的流程和實踐. Scrum Master 促進敏捷開發團隊成員之間的協作.Scru ...
- CentOS 文件管理
目录 目录管理 目录结构 切换目录 查看目录 创建目录 复制目录 剪切目录 删除目录 文件管理 查看文件 创建文件 复制文件 剪切文件 删除文件 创建链接 目录管理 目录也是一种文件. 蓝色目录,绿色 ...
- 第六次Alpha Scrum Meeting
本次会议为Alpha阶段第六次Scrum Meeting会议 会议概要 会议时间:2021年5月2日 会议地点:线上会议 会议时长:20min 会议内容简介:本次会议主要由每个人展示自己目前完成的工作 ...