Codeforces Round #606(B-D)
Dashboard - Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) - Codeforces
B. Make Them Odd
题意: 一个数组,每次选择一个数,将数组中的这个数都减半,问多少次数组就所有数字都是奇数
题解:将最后变成的奇数相同的数组分成一组,然后答案加上最大的呢个数需要多少次变成奇数即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=5e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N];
unordered_map<ll,ll> mp,maxn;
ll solve(ll x){//求出这个数组最后变成的奇数是几
ll pt=1;
ll maxn=-inf;
while(pt<x){
pt*=2;
if(x%pt==0) maxn=max(maxn,pt);
}
return x/maxn;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t;cin>>t;
while(t--){
ll n;cin>>n;
vector<ll> q;
for(ll i=1;i<=n;i++){
cin>>a[i];
if(a[i]%2) continue;
ll res=solve(a[i]);
if(!mp[res]){
mp[res]=1;q.push_back(res);
}
maxn[res]=max(maxn[res],a[i]);
}
ll ans=0;
for(ll i=0;i<q.size();i++){
ll pt=maxn[q[i]]/q[i];
while(pt>1){
pt/=2;ans++;
}
mp[q[i]]=maxn[q[i]]=0;
}
cout<<ans<<endl;
}
}
C. As Simple as One and Two
题意:给出一个字符串,每次选择一个字符删除,最后保证字符串中不出现“one"和”two",问最少删除几个字符。
题解:分情况讨论
- one和two单独出现的时候,删除中间的,这样可以防止出现”oneeee“这种情况。
- one和two一起出现,一种特殊情况,twone,这个时候我们删除中间的"o"。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=5e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N];
unordered_map<ll,ll> mp,maxn;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t;cin>>t;
while(t--){
string s;cin>>s;
ll sum=0;
vector<ll> ans;
if(s.size()==1){
cout<<"0"<<endl<<endl;
continue;
}
for(ll i=0;i<s.size()-2;){
if(s[i]=='o'&&s[i+1]=='n'&&s[i+2]=='e'){//单独出现
sum++;ans.push_back(i+1);i+=3;
}
else if(s[i]=='t'&&s[i+1]=='w'&&s[i+2]=='o'){//一起出现的特殊情况
if(i+4<s.size()){//确定好边界,防止访问越界
if(s[i+3]=='n'&&s[i+4]=='e'){
sum++;ans.push_back(i+2);i+=5;
}
else{
sum++;ans.push_back(i+1);i+=3;
}
}
else{
sum++;ans.push_back(i+1);i+=3;
}
}
else i++;
}
cout<<sum<<endl;
for(ll i=0;i<ans.size();i++) cout<<ans[i]+1<<" ";
cout<<endl;
}
}
D. Let's Play the Words?
题意:给出n个01字符串,将他们按照某种顺序排序,要求如果前一个字符串是什么结尾,后一个字符串就是什么开头。比如:前一个是001,1结尾后一个也要是1开头,可以选择将其中的一些字符串翻转,要求翻转后的字符串不能与原有的相同,问最少翻转几次
题解:分成几种类型的字符串,01,10,0,1,00,11,将其中00,0分为一类,11,1分为一类,首先,只要存在01,或者10,那么00,0,11,1一定能找到位置,所以我们只需要判断01和10即可,如果如果不存在01和10那么 {00,0}和{11,1}只能存在一个,如果存在01,10就判断能不能有正确答案即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=5e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N];
string s[N];
ll sum[3][3],le[3];
unordered_map<string,ll> mp;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t;cin>>t;
while(t--){
ll n;cin>>n;
memset(sum,0,sizeof(sum));//清零
memset(le,0,sizeof(le));
mp.clear();
vector<ll> p,q;
for(ll i=1;i<=n;i++){
cin>>s[i];
mp[s[i]]=1;
if(s[i].size()==1) le[s[i][0]-'0']++;//存储0出现的位置
else sum[s[i][0]-'0'][s[i][s[i].size()-1]-'0']++;//存储1出现的位置
if(s[i][0]=='0'&&s[i][s[i].size()-1]=='1'&&s[i].size()>1) p.push_back(i);//存储01出现的位置
else if(s[i][0]=='1'&&s[i][s[i].size()-1]=='0'&&s[i].size()>1) q.push_back(i);//存储10出现的位置
}
ll flag=0;//用来判断{00,0},和{11,1}出现的个数
ll pt=0;
if(le[0]||sum[0][0]) flag++;
if(le[1]||sum[1][1]) flag++;
vector<ll> ans;
if(sum[0][1]||sum[1][0]){
if(sum[0][1]>sum[1][0]){
ll px=(sum[0][1]+sum[1][0])/2;
ll x=abs(sum[1][0]-px);
ll cnt=0;
for(ll i=0;i<p.size(),cnt<x;i++){
string st=s[p[i]];
reverse(st.begin(),st.end());
if(mp[st]) continue;//判断翻转后是否存在
ans.push_back(p[i]);
cnt++;
}
if(cnt!=x){
pt=1;
}
}
else{
ll px=(sum[0][1]+sum[1][0])/2;
ll x=abs(sum[0][1]-px);
ll cnt=0;
for(ll i=0;i<q.size(),cnt<x;i++){
string st=s[q[i]];
reverse(st.begin(),st.end());
if(mp[st]) continue;
ans.push_back(q[i]);
cnt++;
}
if(cnt!=x){
pt=1;
}
}
}
else if(flag==2){//如果01,10一个也没有但是{00.0},{11,1}都存在则不可以
pt=1;
}
if(pt) cout<<"-1"<<endl;
else {
cout<<ans.size()<<endl;
for(ll j=0;j<ans.size();j++) cout<<ans[j]<<" ";
cout<<endl;
}
}
}
Codeforces Round #606(B-D)的更多相关文章
- 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...
- Codeforces Round #606 E
题:https://codeforces.com/contest/1277/problem/E 题意:给定无向图,求有多少个pair之间的简单路径一定要经过给定的点a和b(pair中任何一个都不是a或 ...
- 20191214 Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
概述 切了 ABCE,Room83 第一 还行吧 A - Happy Birthday, Polycarp! 题解 显然这样的数不会很多. 于是可以通过构造法,直接求出 \([1,10^9]\) 内所 ...
- Codeforces Round #606 (Div. 2)
传送门 A. Happy Birthday, Polycarp! 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/14 19:07:57 * ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
链接 签到题,求出位数,然后9*(位数-1)+ 从位数相同的全一开始加看能加几次的个数 #include<bits/stdc++.h> using namespace std; int m ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 题解
Happy Birthday, Polycarp! Make Them Odd As Simple as One and Two Let's Play the Words? Two Fairs Bea ...
- Codeforces Round #606 (Div. 1) Solution
从这里开始 比赛目录 我菜爆了. Problem A As Simple as One and Two 我会 AC 自动机上 dp. one 和 two 删掉中间的字符,twone 删掉中间的 o. ...
- Codeforces Round #606 (Div. 2) E - Two Fairs(DFS,反向思维)
- Codeforces Round #606 (Div. 2) D - Let's Play the Words?(贪心+map)
随机推荐
- php 正则获取字符串中的汉字(去除字符串中除汉字外的所有字符)
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $list[$i]['iparr'], $matches); $list[$i]['iparr'] = join(' ...
- JAVA用for循环打印*三角形
public class Sanjiaoxing { //本节为for循环的嵌套结构练习 public static void main(String[] args) { // TODO Auto-g ...
- ABAP CDS - DEFINE VIEW, view_annot
Syntax ... @annotation ... Effect Specifies Annotation annotation in the definition of a CDS view of ...
- 论文解读(SR-GNN)《Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data》
论文信息 论文标题:Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data论文作者:Qi Zhu, ...
- 不要使用短路逻辑编写 stl sorter 多条件比较
前言 最近工期紧.任务多,没有时间更新博客,就水一期吧.虽然是水,也不能太水,刚好最近工作中遇到一个 sorter 多条件排序的问题,花费了半天时间来定位解决,就说说它吧. 背景 公司产品是一个跨端的 ...
- sql server2016 数据库日志 清空语句
/*1.查询数据库日志文件名称*/--TC_MES_DEV为数据库名--这里的 数据库日志名,可以用以下注释的语句进行查询(_log那个)USE [TC_MES_DEV]GOSELECT file_i ...
- vmstate 命令详解2022
vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过 vmstat 来发现系统中的瓶颈呢? 1. 使用vmstat 使用前我们先看下命令介绍及参数定义 Usag ...
- 一文聊透 Netty 核心引擎 Reactor 的运转架构
本系列Netty源码解析文章基于 4.1.56.Final版本 本文笔者来为大家介绍下Netty的核心引擎Reactor的运转架构,希望通过本文的介绍能够让大家对Reactor是如何驱动着整个Nett ...
- 07 MySQL_事务
事务 事务( transaction) 是数据库中执行同一业务多条SQL语句 工作单元,事务可以保证多条SQL语句全部执行成功或全部执行失败 和事务相关的SQL语句: 验证事务: 1. 创建表: cr ...
- IDea折叠模块快捷键-*04
如何折叠IntelliJ IDEA代码片段 IntelliJ IDEA 快捷键说明大全(转载) idea 字体_IDEA 新手实用插件分享:让你的 IDEA 逼格瞬间提升