codeforces 708B-Recover the String
来源:互联网 发布:洛天依软件手机版 编辑:程序博客网 时间:2024/06/13 04:35
题目链接:http://codeforces.com/problemset/problem/708/B
题意:给出四个数分别代表字符串中子序列00,01,10,11的数量,求一个满足该条件的字符串。
思路:首先a和d必须是k * (k - 1) / 2 (k >0 )的形式,通过此式可以算出0和1的数目num0和num1。其中如果a(d)==0则num0(num1)可以为0或1,需要对num0(num1)==0的情况进行特判。如特判完成且程序未结束,num0和num1必定不为0,即可求num0与num1。并且b + c == num0 * num1(证明:可以先左边num0个0,右边num0个1,此时cur01 = b*c,cur10 = 0 ,将其中一个0与一个1对调后cur01减少了x,对应cur10增加了x,故cur01 + cur10 = num0 * num1)。然后先初始化左边num0个0,右边num1个1,将num1个1不断向左移动,直到cur01小于b,将num1个1右边的0中的某个0 和 num1个1中的某个1进行对调,补回(b-cur01)个01串。
#include<bits/stdc++.h>using namespace std;const int N = 1e6+3;int str[N];map<int,int> sum;//判断是否为k* (k - 1) /2形式int main(){ int a,b,c,d; scanf("%d %d %d %d",&a,&b,&c,&d); for(int i = 1,k = 0 ;k <= 1e9 ;k += i,i++) sum[k] = i; if(a == 0 && b == 0 && c == 0 && d == 0) { printf("0\n"); return 0; } if(a == 0 && b == 0 && c == 0 && sum[d]) { for(int i = 0 ;i < sum[d] ;i++) printf("1"); printf("\n"); return 0; } if(d == 0 && b == 0 && c == 0 && sum[a]) { for(int i = 0 ;i < sum[a] ;i++) printf("0"); printf("\n"); return 0; } if(sum[a] == 0 || sum[d] == 0) { printf("Impossible\n"); return 0; } int num0 = sum[a] ,num1 = sum[d] ,num = num0 + num1; if(b + c != num0 * num1) { printf("Impossible\n"); return 0; } int l = 1 + b/num1 ,r = l + num1; for(int i = l ;i < r ;i++) str[i] = 1; str[r] = 1 ,str[r - b%num1] = 0; for(int i = 1 ;i <= num ;i++) printf("%d",str[i]); printf("\n"); return 0;}
0 0
- codeforces 708B-Recover the String
- CodeForces 708B Recover the String
- Codeforces Problem 708B Recover the String(implementation&math)
- codeforces Recover the String
- [codeforces]Recover the String
- 【CF 708B】Recover the String(组合+瞎搞)
- codeforces 709 D Recover the String (构造)
- codeforces 709D Recover the String (构造+模拟)
- AIM Tech Round 3 (Div. 1)-B. Recover the String
- 【codeforce 708e】Recover the String
- codeforces AIM Tech Round 3 (Div. 2)D. Recover the String
- AIM Tech Round 3 (Div. 1) B. Recover the String(构造)
- AIM Tech Round 3 (Div. 1) B. Recover the String 构造
- codeforces 128B. String
- codeforces 128B - String
- codeforces 494B Obsessive String
- codeforces B. Pasha and String
- codeforces 545B Equidistant String
- dfs解救小哈
- POJ 2182 Lost Cows树状数组 *
- Activity的执行流程
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
- JAVA Eclipse使用Maven构建web项目详解(SSM框架)
- codeforces 708B-Recover the String
- PHP WebShell源码下载(1)
- C语言 FILE结构体
- 记一次Docker下安装Logstash+Elasticsearch+Kibana经历
- JAVA_WEB设计模式4
- Loaded plugins: fastestmirror -- Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecac
- #85 Insert Node in a Binary Search Tree
- uva 12186 Another Crisis 树形DP
- phpcms常用变量