Educational Codeforces Round 159 (Rated for Div. 2)(B 二分贪心 Cgcd D二分+前缀和 E字典树)

A - Binary Imbalance

有只要在01之间插入就能制造无限个0,没有0就统计0 1个数即可

#include<bits/stdc++.h>
using namespace std;
const int N =1100+10,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
const long long inf=1e17;
using node=tuple<int,int,int>;
int n,m,k;
int s[N][N];
char p[N][N];
void solve()
{cin>>n;
    string s;cin>>s;
    int cnt0=0;
    bool ok=false;
    for(int i=0;i<s.size();i++){
        if(s[i]=='0') cnt0++;
        else cnt0--;
        if(i!=0&&s[i-1]!=s[i]) ok=true;
    }
    if(ok||cnt0>0){
        cout<<"Yes\n";
    }
    else cout<<"No\n";
}

signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

B - Getting Points

具有单调性,n也挺大,我直接二分可以休息多少天了

然后直接算n天一共有多少个任务,然后有个特殊情况是

如果我最后一天刚好是发布任务的那天且今天是周一

那么我当前的任务只能让最后一个做

前面能做的任务要减1,能解决的总任务是2*x-1

#include<bits/stdc++.h>
using namespace std;
const int N =2e5+10,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
const long long inf=1e17;
using node=tuple<int,int,int>;
int n,m,k;
void solve()
{
    int p,l,t;
    cin>>n>>p>>l>>t;
    auto check=[&](int x)
    {
        x=n-x;
        int now=(n+6)/7;
        int res=l*x+min(now,x*2)*t;
        if(n%7==1){
            res=l*x+min(now-1,x*2-1)*t+t;
        }
        return res>=p;
    };
    int ll=0,r=n;
    while(ll<r){
        int mid=ll+r+1>>1;
        if(check(mid)) ll=mid;
        else r=mid-1;
    }
    cout<<ll<<"\n";
}

signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

C:

我直接一眼直觉得出结论了ahhh(虽然不知道这想法哪来的,反正就很直觉)

赛后证明一下

每个数要变成一个统一的数字 x

那么第一个数要是 a+kw=x ->> x-a=kw

第二个数是 b+kw=x -> x-b=kw

....

因为只能数只能增大不能减少,所以我们直接让x为最大值即可

然后求最大值和每个数的差值的最大公因数即可

然后增加一个数,肯定也要上最大值加上这个gcd了

然后我是直接枚举两种情况的

比最大值大,和比最大值小的

循环n+1次肯定都能找到,然后计算代价即可

#include<bits/stdc++.h>
using namespace std;
const int N =2e5+10,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
const long long inf=1e17;

int n,m,k;
int a[N];
int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    if(n==1){
        cout<<1<<"\n";return ;
    }
    sort(a+1,a+1+n);
    vector<int> b;
    for(int i=1;i<n;i++){
        b.push_back(a[n]-a[i]);
    }
    int g=b[0];
    for(auto x:b) g=gcd(g,x);
    int res=0;
    for(auto x:b){
        res+=x/g;
    }
    map<int,int> mp;
    for(int i=1;i<=n;i++){
        mp[a[i]]++;
    }
    int mn=2e18;
    int cnt=n;
    for(int i=0,now=a[n];i<=n;i++){
        now+=g;
        if(!mp.count(now)){
            mn=min(mn,n*(now-a[n])/g);
            break;
        }
    }
    for(int i=0,now=a[n];i<=n;i++){
        now-=g;
        if(!mp.count(now)){
            mn=min(mn,abs(now-a[n])/g);
            break;
        }
    }
    cout<<res+mn<<"\n";
}

signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

D - Robot Queries

手画一下可以发现,中间那段翻转不影响最终结果

然后还是做不了发现

然后我们要进行转化一下

转化成前缀和,把区间问题变成选择两个点后到达的点是xi,yi

对于不是反转的区间 [1,L-1]和[R-1,N]这两个区间,直接从里面找即可

对于反转的我们其实也可以直接找

比如要找的点是 xi,y1

那么还原回来

pre[L-1]+pre[R]-pre[x-1]=xi

pre[x-1]=pre[L-1]+pre[R]-xi

注意这里的pre[R]-pre[x-1]是代表着翻转的区间的变化量

#include<bits/stdc++.h>
using namespace std;
const int N =2e5+10,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
const long long inf=1e17;
using node=tuple<int,int,int>;
int n,m,k;
int a[N];
const int dx[4]={1,-1,0,0};
const int dy[4]={0,0,1,-1};
map<char,int>dir={{'U',2},{'D',3},{'L',1},{'R',0}};
void solve()
{
    cin>>n>>m;
    string s;
    cin>>s;
    vector<PII> pre(n+10);
    pre[0]={0,0};
    s="?"+s;
    for(int i=1;i<=n;i++){
        int k=dir[s[i]];
        auto [x,y]=pre[i-1];
        x+=dx[k],y+=dy[k];
        pre[i]={x,y};
    }
    vector<set<PII>> v(6*n+10);
    for(int i=0;i<=n;i++){
        auto [x,y]=pre[i];
        v[x+3*n].insert({y,i});
    }
    for(int i=0;i<=4*n;i++){
        v[i].insert({inf,inf});
    }
    while(m--){
        int tx,ty,L,R;
        cin>>tx>>ty>>L>>R;
        int px,py;

        px=tx,py=ty;
        auto [y1,id1]=*v[px+3*n].lower_bound({py,0});
        if(y1==py&&id1<=L-1){
            cout<<"YES\n";
            continue;
        }

        //[L,R]
        auto [adx,ady]=pre[L-1];
        auto [bdx,bdy]=pre[R];
        px=bdx+adx-tx,py=bdy+ady-ty;
        //cout<<px<<' '<<py<<'\n';
        auto [y2,id2]=*v[px+3*n].lower_bound({py,L-1});
        if(y2==py&&id2>=L-1&&id2<=R){
            cout<<"YES\n";
            continue;
        }

        //[R+1,n]
        px=tx,py=ty;
        auto [y3,id3]=*v[px+3*n].lower_bound({py,R+1});
        if(y3==py&&id3>=R+1&&id3<=n){
            cout<<"YES\n";
            continue;
        }
        cout<<"NO\n";
    }
}

signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
   // cin>>t;
    while(t--) solve();
}

E - Collapsing Strings

这个题之前我博客遇到过相似的题

然后也直接一眼题...

直接跑个字典树,然后翻转字符串减去要减去的贡献即可

我的query里面你可以

第一个点是p,第二个点的cnt[p]是3

然后要减去的代价是两个点之间消失的个数*当前点的长度-1

3-2就代表着我从第二个点到第三个点少了一个可以匹配的字符串

说明这一个字符串只能匹配到长度2的前缀他就没了

然后还有个问题是如果匹配完了我的lst不为0

说明有lst个字符串能完整匹配完

#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10,mod=998244353;

typedef long long LL;
typedef pair<int, int> PII;
const long long inf=1e17;
using node=tuple<int,int,int>;
int n,m,k;
int a[N];
int tr[N][27];
string s[N];
int cnt[N],idx;
long long res;
void insert(string s){
    int p=0;
    for(int i=0;i<s.size();i++){
        int u=s[i]-'a';
        if(!tr[p][u]) tr[p][u]=++idx;
        p=tr[p][u];
        cnt[p]++;
    }
}
void query(string s){
    int n=s.size();
    int len=0;
    int p=0,lst=-1;
    for(int i=0;i<s.size();i++)
    {
        int u=s[i]-'a';
          len++;
        if(!tr[p][u]){
            if(lst){
                res-=1ll*lst*2*(len-1);
            }
            return ;
        }
        p=tr[p][u];
        if(lst==-1){
            lst=cnt[p];
            continue;
        }
        res-=1ll*(lst-cnt[p])*2*(len-1);
        lst=cnt[p];
    }
    if(lst){
        res-=1ll*lst*2*len;
    }

}
void solve()
{
    cin>>n;
 
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
        insert(s[i]);
        sum+=s[i].size();
    }

    for(int i=1;i<=n;i++){
        res+=sum+1ll*(int)(s[i].size())*n;
        reverse(s[i].begin(),s[i].end());
        query(s[i]);
    }
    cout<<res<<"\n";
}

signed main()
{
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
   // cin>>t;
    while(t--) solve();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217695.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shopee主营店铺链接怎么填,shopee店铺url在哪里找——站斧浏览器

要设置Shopee主营店铺链接&#xff0c;在设置页面中填写自己想要推广的其他店铺的链接地址&#xff0c;并进行测试和提交审核。通过设置主营店铺链接&#xff0c;卖家可以增加销售量和曝光率。 shopee主营店铺链接怎么填&#xff1f; Shopee主营店铺链接是指卖家在Shopee平台…

网站防盗链是什么

随着互联网的快速发展&#xff0c;网站的安全问题越来越受到关注。其中&#xff0c;防盗链是许多网站面临的一个重要问题。本文将介绍网站防盗链的基本概念、原因以及如何采取措施进行保护。 一、什么是网站防盗链&#xff1f; 网站防盗链是指未经授权的网站通过技术手段获取…

如何有效进行测试执行进度计划

测试执行通常都是处于软件测试生命周期的关键路径上&#xff0c;它不仅在测试过程中占有重要的地位&#xff0c;并且也会花费大量的测试时间。针对测试执行而进行的计划&#xff0c;即测试执行进度计划&#xff0c;是进行测试执行进度控制的基础。在进行测试执行进度计划制订的…

【Linux | 编程实践】 crontab 命令编辑大全 scp 应用

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Vue入门——v-on标签

文章目录 规则v-on 一、案例总结 规则 v-on 作用&#xff1a;为html标签绑定事件语法&#xff1a; v-on&#xff1a;事件名&#xff1a;“函数名”简写为 事件名“函数名” 注意&#xff1a;函数需要定义在methods选项内部 一、案例 我们给案件绑定一个单击事件 <!DOCTYPE…

flutter开发实战-ValueListenableBuilder实现局部刷新功能

flutter开发实战-ValueListenableBuilder实现局部刷新功能 在创建的新工程中&#xff0c;点击按钮更新counter后&#xff0c;通过setState可以出发本类的build方法进行更新。当我们只需要更新一小部分控件的时候&#xff0c;通过setState就不太合适了&#xff0c;这就需要进行…

Shopee买家通系统内置防指纹技术可解决多账号管理操作

为了解决多账号管理的难题&#xff0c;我们发现了一款强大的利器——Shopee买家通系统&#xff0c;它为我们提供了便捷而高效的辅助操作。这款系统基于先进的指纹浏览器技术开发&#xff0c;实现了全自动化的操作&#xff0c;让多账号管理变得轻而易举。 Shopee买家通系统内置了…

layui+ssm实现数据表格双击编辑更新数据

layui实现数据表格双击编辑数据更新 在使用layui加载后端数据请求时&#xff0c;对数据选项框进行双击即可实现数据的输入编辑更改 代码块 var form layui.form, table layui.table,layer parent.layer undefined ? layui.layer : parent.layer,laypage layui.laypag…

5.【自动驾驶与机器人中的SLAM技术】2D点云的scan matching算法 和 检测退化场景的思路

目录 1. 基于优化的点到点/线的配准2. 对似然场图像进行插值&#xff0c;提高匹配精度3. 对二维激光点云中会对SLAM功能产生退化场景的检测4. 在诸如扫地机器人等这样基于2D激光雷达导航的机器人&#xff0c;如何处理悬空/低矮物体5. 也欢迎大家来我的读书号--过千帆&#xff0…

2023经典软件测试面试题

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计…

Figma安装指南:新手入门必看!

如果您想下载Figma客户端&#xff0c;可以直接在Figma官网Products>Downloads页面下载。 如果你不能访问Figma的官方网站&#xff0c;即使下载到客户端&#xff0c;你的网络环境也不能正常使用。 因为Figma的服务器在国外&#xff0c;在国内访问时经常会遇到网络不稳定的情…

如何制作教育培训小程序

教育培训行业近年来发展迅速&#xff0c;越来越多的机构开始意识到通过小程序来提供在线教育服务的重要性。小程序不仅可以为用户提供便捷的学习体验&#xff0c;还可以增加机构的知名度和品牌影响力。那么&#xff0c;如何制作一款教育培训小程序呢&#xff1f; 首先&#xff…

系列十三、SpringBoot的自动配置原理分析

一、概述 我们知道Java发展到现在功能十分的强大&#xff0c;生态异常的丰富&#xff0c;这里面离开不了Spring及其家族产品的支持&#xff0c;而作为Spring生态的明星产品Spring Boot可以说像王者一般的存在&#xff0c;那么的耀眼&#xff0c;那么的光彩夺目&#xff01;那么…

【开源】基于Vue.js的停车场收费系统

文末获取源码&#xff0c;项目编号&#xff1a; S 076 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S076。} 文末获取源码&#xff0c;项目编号&#xff1a;S076。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费…

油气罐防雷和化工防雷综合解决方案

油气罐防雷和化工防雷是化工企业安全生产的重要内容&#xff0c;涉及到化工装置、储罐、管道、电气设施等多个方面。地凯科技将介绍油气罐防雷和化工防雷的方案和应用方案&#xff0c;以期为化工企业提供一些参考。 油气罐防雷 油气罐是储存可燃易爆物质的设施&#xff0c;一…

jmeter资料

1.jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本、Java 对象…

侯捷C++八部曲(一,面向对象)

头文件和类的声明 inline inline修饰函数&#xff0c;是给编译器的一个建议&#xff0c;到底是否为inline由编译器来决定&#xff0c;inline修饰的函数在使用时是做简单的替换&#xff0c;这样就避免了一些函数栈空间的使用&#xff0c;从能提升效率。从另一种角度看&#xff…

将.tiff格式图片转换为可视化的png,jpg,bmp等格式(附代码)

目前常用的.tiff格式图片转png格式图片&#xff0c;搜了一下&#xff0c;多数都是第三方平台直接转换&#xff0c;需要米&#xff0c;其实大可不必&#xff0c;自己撸代码就可以直接转换。 TIFF&#xff08;Tagged Image File Format&#xff09;是一种灵活的位图格式&#xf…

Android 应用程序无响应定位ANR原因

废话不多说&#xff0c;直接上方案&#xff1a; 第一步&#xff1a; 执行adb命令 adb bugreport /Users/mac/Desktop/anr 解压后FS/data/anr下就会有相关anr文件 /Users/mac/Desktop/anr 是电脑存储文件的路径&#xff0c;可以随便定义&#xff0c;这个没有影响。我的电脑是…

做一个类似万师傅家政小程序需要有哪些功能?

现如今人们生活节奏不断加快&#xff0c;自然很少有时间去处理生活中的琐事&#xff0c;恰好家政维修保洁小程序开发则能给线下用户提供方便。 家政保洁小程序应该具备哪些功能&#xff1f; 1、提供家政行业资讯&#xff0c;方便用户在选择家政保洁前了解行业动态。 2、分类搜…