590 A. Median Smoothing
来源:互联网 发布:排名优化软件点击 编辑:程序博客网 时间:2024/05/19 03:24
找 0 和 1 相间的字串,只有 0 和 1 相间的地方才需要修改,修改的次数就是修改最长0/1相间字串的次数,由于每次修改都是对称的,所以总的修改次数为最长字串长度的一半。
每次修改字串有两种情况,当字串首尾元素相同时,整个字串都修改为 首尾元素;当首尾元素不相同时,前一半修改为首元素,后一般修改为尾元素。
代码如下:
#include <iostream>using namespace std;int main() {int n,num,i,j,k,l,maxval=-999,len;cin>>n;bool *vec=new bool[n],val,val2;char ch;for(i=0;i<n;++i){cin>>ch;vec[i] = ch-'0';}num = n-1;for(i=0;i<num;++i){j = i; // i 为 0/1 相间子串的起始位置,while(j<num&&vec[j]!=vec[j+1]) //要找到相间子串的最后位置,用 j 表示 ++j;val = vec[i]; // 保存 前一半子串要赋值的 if(vec[i]==vec[j]) // 如果首尾元素相同,那么前一半和后一半要赋的值一样 val2 = val;else //否则, 后一半要赋的值为尾元素 val2 = vec[j];for(k=i+1,l=j-1;k<=l;++k,--l) // 前一半元素从前往后赋值,后一半元素从后往前赋值 {vec[k] = val;vec[l] = val2;}len = j-i; // 求最大子串长度 if(len>maxval)maxval = len;i = j; // 从 子串 的后面开始找 }cout<<maxval/2<<endl; // 最长 0/1 相间子串长度的一半为修改次数 for(i=0;i<n;++i)cout<<vec[i]<<" ";return 0;}
0 0
- 590 A. Median Smoothing
- Codeforces 590A Median Smoothing
- Codeforces 590 A:Median Smoothing
- CodeForces-590A Median Smoothing
- CodeForces 590A Median Smoothing
- CodeForces 590A Median Smoothing
- Codeforces 590A Median Smoothing
- Codeforces 590A Median Smoothing(暴力)
- Code Forces 590 A. Median Smoothing(机智)
- cf590A. Median Smoothing
- codeforces 591 C. Median Smoothing
- cf 591C Median Smoothing
- 尺取法 Codeforces591C Median Smoothing
- Codeforces Round #327 (Div. 1) A题: Median Smoothing [规律题]
- codeforces#327-C.Median Smoothing-规律题
- Median Smoothing(构造性算法)
- cf #327 div2 C.Median Smoothing
- Codeforces #591 C Median Smoothing(思维)
- 关于UITableView的间隔问题(header和footer)和分割线
- 什么是数据的高内聚、低耦合
- 清理缓存和计算缓存内容大小
- 空间索引
- Volley网络请求源码分析
- 590 A. Median Smoothing
- 九度OJ 1256:找出两个只出现了一次的数字 (位运算)
- uml 分析设计 需求模型
- Linux spi驱动分析(一)----总线驱动
- Oracle常见问题
- 超酷算法:用四叉树和希尔伯特曲线做空间索引
- LeetCode(120) Triangle
- 关于android中数据持久化存储的方法的知识整理
- C/C++中内存对齐问题