590 A. Median Smoothing
2015-11-14 15:48
267 查看
找 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
,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;
}
每次修改字串有两种情况,当字串首尾元素相同时,整个字串都修改为 首尾元素;当首尾元素不相同时,前一半修改为首元素,后一般修改为尾元素。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int n,num,i,j,k,l,maxval=-999,len;
cin>>n;
bool *vec=new bool
,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;
}
相关文章推荐
- 海南海口舞蹈培训信息中心
- STL容器之vector
- cenos7.1 安装openstack kilo 心得之一安装环境介绍及环境下载
- 6.自定义视图知识总结
- ural 1242. Werewolf
- 推荐大家一个不错android模拟器工具Genymotion
- Linux安装oracle常用命令
- Windows10中SC_CLOSE消息的变化
- c++关于顺序容器指针迭代器失效问题
- Linux spi驱动分析(四)----SPI设备驱动(W25Q32BV)
- POJSeek the Name, Seek the Fame(KMP算法)
- 【软工文档总结之后五个文档总结(重点篇)】
- opencv2矩阵操作
- 手机号码帮助类
- shell入门-shell特性
- MySQL常用操作
- How to unload a kernel module in use
- Linux spi驱动分析(三)----spiddev分析
- Java过滤特殊字符
- .htaccess文件url重写小记