CSU 1536 bit string reordering
2015-11-02 20:31
295 查看
首先构造出两个满足条件的字符串储存在s1,s2,原串储存在s。
比较s1串s2串中‘1’的个数是否和s串中的‘1’的个数相等。若相等,则统计转换的次数。
统计转换次数的方法看compare函数。
比较s1串s2串中‘1’的个数是否和s串中的‘1’的个数相等。若相等,则统计转换的次数。
统计转换次数的方法看compare函数。
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; char s1[20],s2[20],s[20]; char c[20],c1[20]; int n,m; int a[20]; int t1,t2; int tt1,tt2,tt3; void build(int k,int d) { for(int i=0;i<k;i++) { if(d%2==0) { s1[t1++]='1'; tt2++; } else s1[t1++]='0'; } for(int i=0;i<k;i++) { if(d%2==0) { s2[t2++]='0'; } else { s2[t2++]='1'; tt3++; } } } int compare(char c[],char c1[]) { int sum=0; int ans=0; for(int i=0;i<n;i++) { sum+=abs(ans); if(c[i]=='1') ans++; if(c1[i]=='1') ans--; } return sum; } int solve() { int ans=1<<29; if(tt1==tt2) ans=compare(s,s1); if(tt1==tt3) ans=min(compare(s,s2),ans); return ans; } int main() { while(~scanf("%d%d",&n,&m)) { tt1=tt2=tt3=0; t1=t2=0; for(int i=0;i<n;i++) { getchar(); scanf("%c",&s[i]); if(s[i]=='1') tt1++; } for(int i=0;i<m;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) { build(a[i],i); } cout<<solve()<<endl; } return 0; }
相关文章推荐
- 前端工程师需要明白的「像素」
- 小米生态链负责人说,小米手环是这样打动用户的
- 关于MongoDB同步延迟问题
- 前端工程师需要明白的「像素」
- HTML5游戏开发引擎,初识CreateJS
- ubuntu下解决字符乱码问题
- leetcode之Peeking Iterator
- linux常用命令ln
- 微信手环1年多了,前主管终于出来聊了聊它是怎么诞生的
- LeetCode——Peeking Iterator
- C宏展开的几个注意事项
- 数据结构例程——图的遍历
- 删除MAC应用程序的4种办法
- WPF如何使用触发器
- Codeforces Round #327 (Div. 1) 解题报告
- 【CODEFORCES】 B. Friends and Presents
- 开发
- 宏
- Sharepoint2010新建一个用户的方法
- JAVA DATE解析(时间戳解析为固定格式)