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",问最少删除几个字符。

题解:分情况讨论

  1. one和two单独出现的时候,删除中间的,这样可以防止出现”oneeee“这种情况。
  2. 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)的更多相关文章

  1. 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...

  2. Codeforces Round #606 E

    题:https://codeforces.com/contest/1277/problem/E 题意:给定无向图,求有多少个pair之间的简单路径一定要经过给定的点a和b(pair中任何一个都不是a或 ...

  3. 20191214 Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    概述 切了 ABCE,Room83 第一 还行吧 A - Happy Birthday, Polycarp! 题解 显然这样的数不会很多. 于是可以通过构造法,直接求出 \([1,10^9]\) 内所 ...

  4. Codeforces Round #606 (Div. 2)

    传送门 A. Happy Birthday, Polycarp! 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/14 19:07:57 * ...

  5. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    链接 签到题,求出位数,然后9*(位数-1)+ 从位数相同的全一开始加看能加几次的个数 #include<bits/stdc++.h> using namespace std; int m ...

  6. 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 ...

  7. Codeforces Round #606 (Div. 1) Solution

    从这里开始 比赛目录 我菜爆了. Problem A As Simple as One and Two 我会 AC 自动机上 dp. one 和 two 删掉中间的字符,twone 删掉中间的 o. ...

  8. Codeforces Round #606 (Div. 2) E - Two Fairs(DFS,反向思维)

  9. Codeforces Round #606 (Div. 2) D - Let's Play the Words?(贪心+map)

随机推荐

  1. 南京大学 静态软件分析(static program analyzes)-- introduction 学习笔记

    一.Programming Languages体系 静态程序分析是编程语言中应用层面下的一个细分领域,它是一个非常重要的核心内容. 在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型 ...

  2. CVE-2021-3156漏洞复现

    CVE-2021-3156linux sudo 权限提升 版本ubantu18.04 使用这个命令可以是普通用户直接提升至管理员权限. 手动测试终端输入 sudoedit -s / 不知道什么原因ub ...

  3. Vue回炉重造之搭建考试答卷系统

    本篇章主要讲述系统搭建逻辑,有疑问的可以加微信联系我.考试系统 资源 Vue.js Element UI 第三方数据接口 业务 答题过程中,防止用户中途退出或者其他不可抗力因素阻碍答题,在每次选择都要 ...

  4. WPF开发随笔收录-ScrollViewer滑块太小解决方案

    一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...

  5. 多校联训 DP 专题

    [UR #20]跳蚤电话 将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可. 点击查看代码 #include<bits/stdc++.h> ...

  6. 详解升讯威在线客服系统前端 JavaScript 脚本加密技术(1)

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 这段时间有几个技术小伙伴问了我一个有意思的问题:"你的前端脚本是 ...

  7. 关于vm虚拟机的问题

    这几天搞虚拟机搞的头疼,真是一步一个坑,总结以下几个问题: 安装不了或用户不接受协议:原因应该是你之前装过vm,没有彻底清理,和本次安装形成了对抗,所以我们需要安装WindowsInstallerCl ...

  8. 配置SSM公钥及创建远程仓库和在IEDA中集成git操作

    3.将.ssh下的id_rsa.pub公钥copy到gitee工作台中 4.创建个人仓库 5.设置开源许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,- 限制! 6.克隆到本地! IDE ...

  9. Root用户无法使用Tab补齐解决

    1. sudo vim /etc/bash.bashrc 2.取消以下注释 #if [ -f /etc/bash_completion ]; then # . /etc/bash_completion ...

  10. HTML及HTTP协议

    web服务的过程: 浏览器发请求 --> HTTP协议 --> 服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文件内容发给浏览器 --> 浏览器渲染页面 ...