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\) 银行会 ...
随机推荐
- Spring Boot 2 构建可部署的war包
默认情况下Spring Boot使用了内嵌的Tomcat服务器,项目最终被打成jar包运行,每个jar包可以被看作一个独立的Web服务器.传统的Web开发,一般会将Web应用打成一个war包,然后将其 ...
- zip 命令使用记录
常常会用到 zip 命令,但是时间一长,就忘记了具体参数,下面简要记录,进行备忘: 常用命令: zip -q -r nvprof_test_out.zip nvprof_test_out/ # 压缩 ...
- 修改robotframework的元素定位方式,使之支持带括号的xpath定位方式
今天困扰我的一个问题终于解决了 robot框架默认的xpth定位方式是不支持带括号运算的xpth表达式的,例如: (//*[@content-desc="iv_message_icon_21 ...
- s3c2440裸机-时钟编程(一、2440时钟体系介绍)
1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线 ...
- go语言设计模式之visitor
这个确实没有调通,也要记录一下 visitor.go package visitor import ( "fmt" "io" "os" ) ...
- es6 Iterator和for...of循环
javascript表示集合的数据结构有 es5: array object es6: map set, 一共4种数据集合 需要一种统一的接口机制来处理所有不同的数据结构 遍历器就是这样一种机制,它是 ...
- acwing 116. 飞行员兄弟
地址 https://www.acwing.com/problem/content/118/ “飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱. 已知每个把手可以处于以下两种状态之 ...
- QT新建空白项目-添加QT设计师界面类时出现的各种库无法导入识别
按照教材上先新建一个空的项目--添加Qt设计师界面类时 出现各种 库无法识别 解决方法: 在 .pro文件中加入一行 QT += widgets 去构建中先执行 qmake 然后再构建一下 ok了 ...
- linux,xshell命令
一. linux 1.Linux发行版 <1> 常见的发行版本如下: Ubuntu Redhat Fedora openSUSE Linux Mint Debian Manjaro M ...
- DirectShow 简介
一.DirectShow 简介 DirectShow(简称 DShow) 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能.它支持多种多样的媒体文件格式,包括 ASF. ...