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;
}
/*
*/
目录
相关文章
|
4月前
|
存储 Java
构造String问题之构造一个Trusted MethodHandles.Lookup实例,如何实现
构造String问题之构造一个Trusted MethodHandles.Lookup实例,如何实现
|
关系型数据库 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...
6265 0
|
4月前
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
|
6月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
6月前
|
算法 Linux C语言
7.学习STL和string类:版本、组件、构造、操作及应用
7.学习STL和string类:版本、组件、构造、操作及应用
|
7月前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
存储 C++
C++实践参考——String类的构造
返回:贺老师课程教学链接 【项目-String类的构造】写一个能处理字符串的类,其数据成员如下所示:class String { public: ...//需要的成员函数(若需要的话,声明友元函数) private: char *p; //指向存储的字符串 int len; //记录字符串的长度 }; 请构造String类的加、减运算。其中
875 0
|
3月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
47 0
java基础(13)String类
|
27天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
49 2
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
68 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性