当前位置: 首页 > news >正文

CF37C

将每个 01 串看作一个二进制数,将长度从小到大排序,对于当前第 \(i\) 个串,首先在第 \(i-1\) 个串的基础上加 \(1\)(如果不能加 \(1\) 即爆位数则无解),如果长度相同则无需任何操作,否则按照缺少的长度从后面补 \(0\)。这样做能保证长度短的不为长度长的前缀,且尽可能的多填数。

#include<iostream>
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
struct L{int v,id;int c[1010];L(){c[0]=1;}
}a[1010],ans[1010];
int n,flag,pp[1010];
bool cmp(L x,L y){return x.v<y.v;
}
bool add(int i){for(int j=a[i].c[0];j>=1;j--){if(a[i].c[j]==0){a[i].c[j]=1;return true;}a[i].c[j]=0;}return false;
}
signed main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i].v,a[i].id=i;sort(a+1,a+n+1,cmp);a[1].c[0]=a[1].v;for(int i=1;i<=a[1].v;i++)a[1].c[i]=0;for(int i=2;i<=n;i++){for(int j=0;j<=a[i-1].c[0];j++)a[i].c[j]=a[i-1].c[j];if(!add(i)){cout<<"NO";return 0;}a[i].c[0]=a[i].v;// cout<<a[i].c[0]<<endl;}for(int i=1;i<=n;i++)ans[a[i].id]=a[i];cout<<"YES\n";for(int i=1;i<=n;i++){for(int j=1;j<=ans[i].c[0];j++)cout<<ans[i].c[j];cout<<'\n';}return 0;
}
http://www.wxhsa.cn/company.asp?id=2199

相关文章:

  • CF33D
  • 支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
  • 初赛程序阅读做题要点
  • 模拟堆(手写堆 的五大操作)
  • 【A】杂题悬桨
  • 使用Osquery进行远程取证:NTFS取证扩展实战指南
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 11
  • 基于 Gitlab 实现 Go 的 CI/CD
  • 2025.9.11
  • 容斥原理
  • 【B】世良真纯
  • 如何使用jobleap.cn避免简历中的严重错误
  • 在 Zustand 中创建通用 Action 的优雅实践
  • 如何用产品思维优化简历的“用户体验”?
  • 简历如何优化,简历如何投递,面试如何准备?
  • 网络流做题笔记
  • 简历优化全攻略:如何写出吸引HR的简历?
  • 重塑云上 AI 应用“运行时”,函数计算进化之路
  • 25.9.12 C语言基本数据类型
  • Avalonia:基础导航
  • bashrc的一些配置记录
  • H5游戏性能优化系列-----协议相关优化
  • 实现我的第一个langchain应用
  • 小说可视化系统设计(程序员副业项目)
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局
  • React Antd or Antd Pro:findDOMNode is deprecated and will be removed in the next major release.
  • 单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测
  • doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系