Educational Codeforces Round 160 (Rated for Div. 2) A~C

news/2024/7/7 19:47:07

目录

A. Rating Increase

题目分析:

B. Swap and Delete

题目分析:

C. Game with Multiset

题目分析:


A. Rating Increase

题目分析:

因为首部不为零,故我们从第二个字符开始遍历,如果遇到第一个不为‘0’的字符,那么从此开始的字符串就是b的最大值,然后判断a和b的大小,视情况输出即可

#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
#define LEN length()
#define all(a) a.begin(),a.end() 
template<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
use{
   string a;cin>>a;
   int t=-1;
   for(int i=1;i<a.LEN;i++){
       if(a[i]!='0'){
           t=i;break;
       }
   }
   if(t==-1||(a.substr(0,t)>=a.substr(t)&&t==(a.LEN-t))||t>(a.LEN-t))cout<<"-1"<<endl;
   else 
   cout<<a.substr(0,t)<<" "<<a.substr(t)<<endl;
}
return 0;
}

B. Swap and Delete

题目分析:

创建一个新字符串t,是在s的基础上可以交换和删除,删除会花费1费用,最终使得t_i \neq s_i ,因为s是不变的,故我们考虑s当中'0'和'1'的个数:设'0'的个数为cnt0, '1'的个数为cnt1

  • cnt0=cnt1,那么我们直接不用删除直接交换'0'和'1'即可
  • cnt0 \neq cnt1,假设cnt0>cnt1,那么我们遍历s,我们不考虑'1',因为'0'的个数足够对应'1',而'1'的个数不足以对应所有的'0',故我们找到最后一个1可以被'1'对应的'0'的下标index,那么从此下标往后的字符个数在t当中就是'0'是不满足题意的,同时我们还应考虑改下标之后的s_i是否为'1',如果为'1'推迟index故删除费用为|s|-index-1

解释大概有些抽象,我们结合代码来看 

#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
#define LEN length()
#define all(a) a.begin(),a.end() 
template<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
use{
   string a;cin>>a;
   int cnt=0;
   int _1=-1,_0=-1;
   for(int i=0;i<a.LEN;i++){
       if(a[i]=='0'){cnt++;_0=i;}
       else _1=i;
   }
   if(cnt==(a.LEN-cnt))cout<<"0"<<endl;
   else if(_1==-1||_0==-1)cout<<a.LEN<<endl;
   else {
       int ans=0;
       if(cnt>a.LEN-cnt){
           int t=a.LEN-cnt;
          for(int i=0;i<a.LEN;i++){
              if(a[i]=='0'&&t>0)t--;
              if(t==0){
                  if(i+1<a.LEN&&a[i+1]!='1')
                  {ans=a.LEN-i-1;
                  break;}
              }
          }
       }
        if(cnt<a.LEN-cnt){
           int t=cnt;
           
          for(int i=0;i<a.LEN;i++){
              if(a[i]=='1'&&t>0)t--;
              if(t==0){
                 if(i+1<a.LEN&&a[i+1]!='0')
                  {ans=a.LEN-i-1;
                  break;}
              }
          }
       }
          cout<<ans<<endl;
   }
}
return 0;
}

C. Game with Multiset

题目分析:

给一个空的集合multiset,1添加2^x,2代表查询是否有multiset的子集和等于w

我们从二进制的角度考虑,当添加一个2^x时,也就是在查询w的时候x位所能做的贡献就加一,查询w的时候也将w转为二进制,我们从零开始遍历集合当中的二进制位,如果当前组成w需要该位,那么集合该位的个数就减一,如果不需要当前位,那么就将多余的位进到下一位为w使用下一位做准备,如果查询到w需要该位,但该位为零的情况输出NO.

对于第一个样例的第一次查询:

#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define INF 0x3f3f3f3f
#define IOS ios::sync_with_stdio(false);cin.tie(0);
#define int long long
#define pb push_back
#define vct vector
#define checkbit __builtin_popcount
#define gcd __gcd
#define use int T;cin>>T;while(T--)
#define LEN length()
#define all(a) a.begin(),a.end() 
template<class T> bool mmax(T &u, T v) { return u < v ? (u = v, 1) : 0; }
template<class T> bool mmin(T &u, T v) { return u > v ? (u = v, 1) : 0; }
#define lowbit(x) (x&(-x))
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
typedef pair<int,int>pii;
signed main()
{IOS
int n;cin>>n;
vct<int>cnt(32);
while(n--){
    int a,b;cin>>a>>b;
    if(a==1){
        cnt[b]++;
    }
    else {bool isok=1;
        vct<int>sit(32);
        vct<int>cntx(32);
        cntx=cnt;
        int o=0;
        while(b>0){
            sit[o++]=b&1;
            b>>=1;
        }
        for(int i=0;i<32;i++){
            if(sit[i]){
                if(!cntx[i]){
                    isok=0;
                    break;
                }
                cntx[i]--;
                
            }
            if(cntx[i]){
                int x=(cntx[i]/2);
                cntx[i+1]+=x;
                cntx[i]-=x*2;
            }
            
        }
        if(isok)yes;
        else no;
    }
}
return 0;
}


http://lihuaxi.xjx100.cn/news/1908142.html

相关文章

案例125:基于微信小程序的个人健康数据管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【C#】TimeSpan

文章目录 概述属性时间计算拓展来源 概述 TimeSpan结构&#xff1a;表示一个时间间隔。 它含有以下四个构造函数&#xff1a; TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。&#xff08;DateTime.Tick:是计算机的一个计时周期&#xff0c;单位是一百纳秒&…

前端学习——关于前端框架的思考

前端框架 我们知道在AngularJS&#xff0c;react&#xff0c;vue等前端框架出现之前&#xff0c;前端开发都是通过js直接操作dom树来实现的&#xff0c;而有了前端框架之后&#xff0c;前端开发基本上不需要在直接操作dom树&#xff0c;相当于在原生html的dom树之间和前端程序…

【SpringBoot实战】基于阿里云实现文件上传

【SpringBoot实战】基于阿里云实现文件上传 在实际项目开发中&#xff0c;不可避免地会使用到阿里云OSS进行文件存储。尽管阿里云有详细的开发文档&#xff0c;但本篇博客的目的是让我们能够用简明的代码快速实现这个功能。 引入依赖 <dependencies><!-- 阿里云oss…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

web前端javaScript笔记——(5)原型对象和垃圾回收

原型对象 原型对象prototype 我们所创建的每一个函数&#xff0c;机械其都会向函数中添加一个属性prototype 这个属性对应着一个对象&#xff0c;这个对象就是我们所谓的原型对象 function Person(){} console.log(Person.prototype);//Object 如果函数作为普通函数调用pr…

Electron训练笔记

终端乱码解决办法&#xff1a;更改编号下载卡住解决办法&#xff1a;Electron RequestError: connect ETIMEDOUT 20.205.243.166:443electron本质是一个依赖库&#xff0c;改依赖库提供了部分对象&#xff0c;可以实现对于window的调用。electron有一个主进程&#xff0c;多个渲…

【华为OD机试真题2023CD卷 JAVAJS】机器人仓库搬砖

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 机器人仓库搬砖 知识点二分查找字符串编程基础数组 题目描述:机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一…