CodeForces - 1256D (贪心+思维)
题意
给定一个长度为n的二进制串(即由n个'0'和'1'构成的字符串),你最多可以进行k次交换相邻两个字符的操作,求字典序最小的串。
思路
大致就是找0的位置,然后贪心的放到最前面,这样字典序会最小:
代码
我的丑做法:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
ll n,k;
cin>>n>>k;
string s;
cin>>s;
int l=s.length();
queue<int> q;
for(int i=0; i<l; i++)
{
if(s[i]=='0')
{
q.push(i);
}
}
ll sum=0,tmp=0,cnt=0,lst=0,flag=0;
while(!q.empty())
{
int f=q.front();
sum+=(f-tmp);
if(sum>k)
{
sum-=(f-tmp);
flag=1;
break;
}
lst=f;
tmp++;
cnt++;
q.pop();
}
// cout<<sum<<" "<<lst<<" "<<cnt<<endl;
if(!flag)
{
for(int i=0;i<cnt;i++)
cout<<0;
for(int i=0;i<n-cnt;i++)
cout<<1;
cout<<endl;
continue;
}
// cout<<cnt<<endl;
string ans;
for(int i=0; i<cnt; i++)
{
ans+="0";
}
for(int i=0; i<lst-cnt+1; i++)
ans+="1";
int num=lst-cnt+1+cnt;
// cout<<"h:"<<num<<endl;
for(int i=num; i<l; i++)
{
num++;
ans+=s[i];
if(s[i]=='0')
{
break;
}
}
// cout<<"g:"<<num<<endl;
for(int i=0; i<k-sum; i++)
{
swap(ans[num-i-1],ans[num-i-2]);
}
for(int i=num; i<l; i++)
ans+=s[i];
cout<<ans<<endl;
}
return 0;
}
简单做法(太强了):
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=1e6+5;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
char s[N];
int main()
{
std::ios::sync_with_stdio(false);
int t;
ll n,k;
cin>>t;
while(t--)
{
cin>>n>>k;
cin>>s+1;
ll l=strlen(s+1),cnt=0;
for(ll i=1;i<=l;i++)
{
if(s[i]=='0')
{
cnt++;
if(k>i-cnt)
{
swap(s[i],s[cnt]);
k-=(i-cnt);
}
else
{
swap(s[i],s[i-k]);
break;
}
}
}
cout<<s+1<<endl;
}
return 0;
}
CodeForces - 1256D (贪心+思维)的更多相关文章
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- Mike and distribution CodeForces - 798D (贪心+思维)
题目链接 TAG: 这是我近期做过最棒的一道贪心思维题,不容易想到,想到就出乎意料. 题意:给定两个含有N个正整数的数组a和b,让你输出一个数字k ,要求k不大于n/2+1,并且输出k个整数,范围为1 ...
- 贪心/思维题 UVA 11292 The Dragon of Loowater
题目传送门 /* 题意:n个头,m个士兵,问能否砍掉n个头 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 */ #include <cstdio> #include <c ...
- T - Posterized(贪心思维)
Description Professor Ibrahim has prepared the final homework for his algorithm’s class. He asked hi ...
- codeforces 233 C. Cycles(贪心+思维)
题目链接:http://codeforces.com/contest/233/problem/C 题意:在一个无相图中有N个长度为3 的回路,输出符合条件的图.注意此图的节点数不得超过100 题解:贪 ...
- codeforces 798 D. Mike and distribution(贪心+思维)
题目链接:http://codeforces.com/contest/798/problem/D 题意:给出两串长度为n的数组a,b,然后要求长度小于等于n/2+1的p数组是的以p为下表a1-ap的和 ...
- codeforces 798 C. Mike and gcd problem(贪心+思维+数论)
题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...
- codeforces 893D Credit Card 贪心 思维
codeforces 893D Credit Card 题目大意: 有一张信用卡可以使用,每天白天都可以去给卡充钱.到了晚上,进入银行对卡的操作时间,操作有三种: 1.\(a_i>0\) 银行会 ...
随机推荐
- zip 命令使用记录
常常会用到 zip 命令,但是时间一长,就忘记了具体参数,下面简要记录,进行备忘: 常用命令: zip -q -r nvprof_test_out.zip nvprof_test_out/ # 压缩 ...
- 快速破解Goland
两种激活方式永久激活:推荐优先使用,永久有效有效期激活:如果你实在激活不了又着急使用,这是备选激活方案,简单快捷 一.永久激活 1.下载新版破解补丁 点击链接 https://pan.baidu.co ...
- React 中this.setStat是批量执行的, 它发现做三次是多余的,所以只执行一次
16==> this.setStat是批量执行的 它发现做三次是多余的,所以只执行一次 import React, { Component } from "react"; e ...
- java 通过Qrcode生成二维码添加图片logo和文字描述
/** * 二维码创建 * @author yhzm * */ public class printServiceImpl extends BaseService { public void barC ...
- 201871010123-吴丽丽 《面向对象程序设计(Java)》第十六周学习总结
201871010123-吴丽丽 <面向对象程序设计(Java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- Vue入门(二)
1.vue3.0安装 cnpm install -g @vue/cli 或者 yarn global add @vue/cli //创建项目 vue create hello-world //运行 n ...
- Python 列表生成式 & 字典生成式
Python 列表生成式 & 字典生成式 通过生成式可以更加简洁地生成列表和字典 列表生成式 对比 直接生成数据后加入列表示例: user_list = list() for i in ran ...
- 请不要嘲笑你身边那些投了P2P的朋友
在这方面我是非常谨慎的,但依然逃脱不了翻车的命运 这段时间曾经无数大V强烈推荐的懒投资出现大面积逾期,又把这个行业推上了风口浪尖,这里讲一讲我的故事 对于大多数人的理财投资可能是从2013年余额宝的推 ...
- js实现addClass方法,classList与className有什么区别?
壹 ❀ 引 Jquery中addClass与removeClass是两个使用高频的方法,对于为dom元素增删class类非常方便:但如果不用JQ,使用js怎么模拟它们呢?本文主要记录下自己的实现思路 ...
- Flink JobManager 和 TaskManager 原理
转自:https://www.cnblogs.com/nicekk/p/11561836.html 一.概述 Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskMana ...