CF709D. Recover the String(构造)

简介: CF709D. Recover the String(构造)

linkkkk

题意:

构造一个01序列,要求序列里00 , 01 , 10 , 11的个数为给定的数

思路:

如果说该序列有x个0,那么00的个数为x ∗ ( x − 1 ) / 2,可以预处理出这个。对于输入的00 , 11个数,求出c n t 0 , c n t 1分别表示0 , 1的个数

如果无法求出c n t 0 , c n t 1的话说明该序列无法构造。

c n t 0 ∗ c n t 1 = 10 + 01,因为相当于任意选取一个,一定会对这两个有贡献的。

假设现在一定合法,考虑如何构造这个序列。假设序列是00001111这种形式,那么在输出的时候,如果c n t 10 > = c n t 0,应该输出1,因为还应当构造的10个数大于等于剩下的0的个数,如果放0的话,只会更少,无法构造乐就。放了1之后造成的影响为c n t 1 − − ,并且还会构造出c n t 0个10;反之,输出0.

如果只有0 / 1的话,特判一下就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+10,inf=0x3f3f3f3f;
map<ll,ll>mp;
ll a,b,c,d;
int main(){
  mp[0]=1;
  for(ll i=1;i*(i-1)/2<=1e9;i++) mp[i*(i-1)/2]=i;
  cin>>a>>b>>c>>d;
  if(!mp[a]||!mp[d]){
    puts("Impossible");
    return 0; 
  }
  if(b+c+d==0){
    while(mp[a]) cout<<"0",mp[a]--;
    return 0;
  }  
  if(a+b+c==0){
    while(mp[d]) cout<<"1",mp[d]--;
    return 0;
  }
  ll cnt0=mp[a],cnt1=mp[d];
  if(cnt0*cnt1!=b+c){
    puts("Impossible");
    return 0; 
  }
  while(cnt0+cnt1){
    if(c>=cnt0){
      cout<<"1";
      c-=cnt0;
      cnt1--;
    }
    else{
      cout<<"0";
      d-=cnt1;
      cnt0--;
    }
  }
  return 0;
}
/*
*/
目录
相关文章
|
22天前
|
算法 Linux C语言
7.学习STL和string类:版本、组件、构造、操作及应用
7.学习STL和string类:版本、组件、构造、操作及应用
|
1月前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
关系型数据库 PostgreSQL
PostgreSQL listagg within group (order by) 聚合兼容用法 string_agg ( order by) - 行列变换,CSV构造...
标签 PostgreSQL , order-set agg , listagg , string_agg , order 背景 listagg — Rows to Delimited Strings The listagg function transforms values from a g...
5976 0
|
存储 C++
C++实践参考——String类的构造
返回:贺老师课程教学链接 【项目-String类的构造】写一个能处理字符串的类,其数据成员如下所示:class String { public: ...//需要的成员函数(若需要的话,声明友元函数) private: char *p; //指向存储的字符串 int len; //记录字符串的长度 }; 请构造String类的加、减运算。其中
850 0
|
2天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
23天前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
31 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
1天前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
8 1
|
24天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
22 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
4天前
|
Java API 索引
java中String类常用API
java中String类常用API
|
21天前
|
Java
Java中String的用法
Java中String的用法
11 1