牛客练习赛106

news2024/9/22 19:40:37

牛客练习赛106

C

在这里插入图片描述

D

脑筋急转弯的构造题

E

在这里插入图片描述
染色法判断二分图
结论,这个图是二分图说明不存在奇环
设左边是x,右边是y
则有 x + y = n , x+y=n, x+y=n, x ∗ y > = 边 数 = n ∗ ( n − 1 ) / 2 − m x*y>=边数=n*(n-1)/2-m xy>==n(n1)/2m
也就是说左式最大是 n ∗ n / 4 ( x = n / 2 , y = n / 2 ) n*n/4 (x=n/2,y=n/2) nn/4(x=n/2,y=n/2)
带 入 m 最 大 是 2 e 5 得 到 n < = 896 带入m最大是2e5得到n<=896 m2e5n<=896
当n大于896或者最大交集数小于边数的话直接可以判断不是二分图
当n小于896时可以O(n+m)染色法判断是否是二分图

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10,M=2*N;
int T,n,m;
int a[1010][1010],c[1010];
int vis[1010];
int dfs(int u,int c=1){
    vis[u]=c;
    for(int i=1;i<=n;i++){
        if(a[i][u]||i==u)continue;
        if(vis[i]&&vis[i]!=3-c)return 0;
        if(vis[i]==0&&!dfs(i,3-c))return 0;
    }
    return 1;
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m;
        if(n<896)memset(a,0,sizeof a);
        for(int i=1;i<=m;i++){
            int x,y;
            cin>>x>>y;
            if(n<896)a[x][y]=a[y][x]=1;
        }
        if(n*n/4-n/2>m || n>=896){cout<<"YES"<<'\n';continue;}
        memset(vis,0,sizeof vis);
//         cout<<"ans="<<dfs(1)<<'\n';
        int ok=1;
        for(int i=1;i<=n;i++){
            if(!vis[i]){
                ok&=dfs(i);
                if(ok==0)break;
            }
        }
        if(ok)cout<<"NO"<<'\n';
        else cout<<"YES"<<'\n';
    }
}

F

在这里插入图片描述
考虑每个人对答案的贡献,
第一个人坐对位置的概率是1/2
第n个人做对位置的概率取决于前面那个人是否坐错位置概率是1/2
其他人坐对位置概率是(前面人坐错)且(自己坐对)答案是1/4
所以答案是n<=2时是1,其他是1/2+(n-2)/4+1/2=(n+2)/4

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int n;
int qpow(int a,int b){
    int ans=1;
    while(b){
        if(b&1)ans=ans*a%mod;
        b/=2;
        a=a*a%mod;
    }
    return ans;
}
signed main(){
    cin>>n;
    if(n<=2)cout<<1;
    else cout<<(n+2)*qpow(4,mod-2)%mod;    
}

G

在这里插入图片描述
很好的一道题

解法1 dp

时间复杂度是 O ( n 2 ) O(n^2) O(n2)

d p [ i ] [ j ] [ 0 / 1 ] dp[i][j][0/1] dp[i][j][0/1]表示前i个位置塞了j个1,第i个位置是不是1,的最小代价
那么,初始化dp[0][0][0]=0
考虑第i个位置,塞j个1的状态
d p [ i ] [ j ] [ 0 ] = m i n ( d p [ i − 1 ] [ j ] [ 0 ] , d p [ i − 1 ] [ j ] [ 1 ] ) dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j][1]) dp[i][j][0]=min(dp[i1][j][0],dp[i1][j][1])
d p [ i ] [ j ] [ 1 ] = d p [ i − 1 ] [ j − 1 ] [ 0 ] + a b s ( i − p [ j ] ) dp[i][j][1]=dp[i-1][j-1][0]+abs(i-p[j]) dp[i][j][1]=dp[i1][j1][0]+abs(ip[j])

p[j]表示第j的1的位置
其实也就是让这个字符串里的1重排

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int p[N],n,a[N],f[N][N][2];
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    int cnt=0;
    for(int i=1;i<=n;i++){
        char c;
        cin>>c;
        a[i]=c-'0';
        if(a[i]==1)p[++cnt]=i;
    }
    memset(f,0x3f,sizeof f);
    f[0][0][0]=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=i;j++){
            if(j==0)f[i][j][0]=f[i-1][j][0];
            else{
                f[i][j][0]=min(f[i-1][j][0],f[i-1][j][1]);
                f[i][j][1]=f[i-1][j-1][0]+abs(i-p[j]);
            }
        }
    }
    int ans=min(f[n][cnt][0],f[n][cnt][1]);
    if(ans==0x3f3f3f3f)ans=-1;
    cout<<ans;
}

解法2费用流

把1看作容器壁,把0看作水
在这里插入图片描述
那么题意就是要求移动水使得每个容器至少都有水
S − − 流 量 = 水 量 费 用 = 0 − − > 容 器 S--^{费用=0}_{流量=水量}-->容器 S==0>
容 器 − − 流 量 = 1 费 用 = 0 − − > T 容器--^{费用=0}_{流量=1}-->T =1=0>T

容 器 i 向 i − 1 , i + 1 连 边 , 容 量 是 I N F , 费 用 是 1 容器i向i-1,i+1连边,容量是INF,费用是1 ii1,i+1INF1

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=1e6+10;
int n,m,S,T,h[N],e[M],ne[M],f[M],w[M];
int incf[N],pre[N],d[N],st[N],idx,q[N];
void add(int a,int b,int c,int d){
    e[idx]=b,f[idx]=c,w[idx]=d,ne[idx]=h[a],h[a]=idx++;
    e[idx]=a,f[idx]=0,w[idx]=-d,ne[idx]=h[b],h[b]=idx++;
}
bool spfa(){
    memset(d,0x3f,sizeof d);
    memset(incf,0,sizeof incf);
    int hh=0,tt=1;
    q[0]=S,d[S]=0,incf[S]=1e9;
    while(hh!=tt){
        int t=q[hh++];
        if(hh==N)hh=0;
        st[t]=0;
        for(int i=h[t];~i;i=ne[i]){
            int ver=e[i];
            if(f[i]&&d[ver]>d[t]+w[i]){
                d[ver]=d[t]+w[i];
                pre[ver]=i;
                incf[ver]=min(incf[t],f[i]);
                if(!st[ver]){
                    st[ver]=1;
                    q[tt++]=ver;
                    if(tt==N)tt=0;
                    
                }
            }
        }
    }
    return incf[T]>0;
}
void EK(int &flow,int &cost){
    flow=cost=0;
    while(spfa()){
        int t=incf[T];
        flow+=t;
        cost+=t*d[T];
        for(int i=T;i!=S;i=e[pre[i]^1]){
            f[pre[i]]-=t;
            f[pre[i]^1]+=t;
        }
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    memset(h,-1,sizeof h);
//     cin>>n>>m>>S>>T;
    string s;
    int len;
    cin>>len>>s;
    S=0,T=N-1;
    cin>>len>>s;
    int sum=0,id=0,cnt=0;
    for(int i=0;i<len;i++){
        int x=s[i]-'0';
        sum+=(x==0);
        if(x==1){
            cnt++;
            id++;
//             cout<<"id="<<id<<" sum="<<sum<<'\n';
            add(S,id,sum,0);
            sum=0;
        }
    }
    id++;
//     cout<<"id="<<id<<" sum="<<sum<<'\n';
    add(S,id,sum,0);
    for(int i=2;i<id;i++)add(i,T,1,0);
    if(cnt>(len+1)/2){
        cout<<-1;
        return 0;
    }
    if(cnt==1){
        cout<<0;
        return 0;
    }
    for(int i=1;i<=id;i++){
        if(i==1)add(i,i+1,1e9,1);
        else if(i==id)add(i,i-1,1e9,1);
        else add(i,i-1,1e9,1),add(i,i+1,1e9,1);
    }
    int flow,cost;
    EK(flow,cost);
    cout<<cost;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【1774. 最接近目标价格的甜点成本】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 你打算做甜点&#xff0c;现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则&#xff1a; 必须选择 一种 冰激凌基料。可以添加 一种或多种 配料&…

[附源码]计算机毕业设计ssm校园一卡通服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Apache+PHP8+MYSQL的配置(目前最新版本)

已有很多年没有WEB开发了&#xff0c;本机都没了测试的服务环境&#xff0c;前几天GO语言的一个测试用例需要用到WEB&#xff0c;于是快速搭建一个Apche环境&#xff0c;也顺便将PHP和MYSQL的环境也配置好&#xff0c;贴出来方便自己和他人&#xff0c;临时需要的时候就更快了&…

机器人控制算法八之路径规划算法:RRT、RRT-Connect、Dynamic-Domain RRTs*

机器人控制算法八之路径规划算法&#xff1a;RRT、RRT-Connect、Dynamic-Domain RRTs* 本文主要介绍基于RRT快速搜索随机树的路径规划算法及其改进&#xff0c;主要参考以下论文&#xff1a; 1.1998 Rapidly-exploring random trees: A new tool for path planning2.IEEE2000 R…

[附源码]计算机毕业设计基于springboot的家政服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计

java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm多用户博客个人网站》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、博文类型、学生博客、论坛信息 、新闻资讯…

[附源码]Python计算机毕业设计Django框架的食品安全监督平台的设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Jsp+MySQL学生学籍信息管理系统 Java毕业设计

中学生学籍信息管理系统主要有三个访问权限。首先是管理员,管理员是整个系统的所有功能的管理者,有对学科、班级、教师、学生学籍信息、课表、学生身体素质以及教务公告的管理权限,可以对以上所有信息进行增删改查&#xff1a;教师角色则有查看教务公告和修改所教授科目对应班级…

大数据:Sqoop 简介与安装

一、Sqoop 简介 Sqoop 是一个常用的数据迁移工具&#xff0c;主要用于在不同存储系统之间实现数据的导入与导出&#xff1a; 导入数据&#xff1a;从 MySQL&#xff0c;Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中&#xff1b; 导出数据&am…

C++ Primer Plus第五版笔记(p101-150)

1 数组和vector类似&#xff0c;数组的大小确定不变&#xff0c;不能随意向数组中增加元素。 2 数组维度必须是一个常量表达式 3 不允许用auto关键字由初始值列表推断类型&#xff0c;另外和vector一样&#xff0c;数组的元素应该为对象&#xff0c;因此不存在引用的数组 4 字符…

7. TTL 延迟队列

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 创建两个队列 QA和 QB&#xff0c;两者队列 TTL 分别设置为 10S 和 40S&#xff0c;然后在创建一个交换机 X和死信交 换机 Y&#xff0c;它们的类型都是 direct&#xff0c;创建一个死信…

SpringBoot_项目打包部署

SpringBoot项目可以是jar类型的maven项目&#xff0c;也可以是一个war类型的maven项目&#xff0c;取决于我们要不要整合jsp使用。但是不管是哪种项目类型&#xff0c;已经不是我们传统意义上的项目结构了 在本地使用SpringBoot的启动器即可访问我们开发的项目。如果我们将项目…

尝试 vue 实现 SEO

背景: 官网使用 VUE 写的, 且 使用 <component /> 动态创建组件, 通过 手动配置的组件, 动态生成页面内容 然后收到通知, 需要实现 SEO , 于是就开始了 VUE SEO 的拉锯战..... 第一种尝试 VUEphantomjs 首先说下原理 phantomjs 是可以部署在服务端的 无头浏览器,…

最强大脑记忆曲线(12)-- 录入数据修改

录入数据修改一、设计思路二、解决过程2.1 设计修改窗口2.2 转成py文件2.3 写业务逻辑1、先显示一下基础页面2、配合适配器&#xff0c;自动调整窗口大小3、在数据录入窗口或背记窗口双击某条记录3.1 增加信号3.2 在槽函数中打开修改页面**3.3 两个页面之间传递信号**3.4 在子窗…

24点问题(带输出构造方式)

问题描述&#xff1a; 在屏幕上输入1〜10范围内的4个整数&#xff08;可以有重复&#xff09;&#xff0c;对它们进行加、减、乘、除四则运算后&#xff08;可以任意的加括号限定计算的优先级&#xff09;&#xff0c;寻找计算结果等于24的表达式。 例如输入4个整数4、5、6、7…

1. RabbitMq 的基本概念

参考使用: 尚硅谷 消息中间件 RabbitMQ 课件 MQ 的概念 什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用…

[附源码]计算机毕业设计毕业生就业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Minecraft 1.19.2 Forge模组开发 05.矿石生成

我们本次尝试在主世界生成模组中自定义的矿石 1.由于1.19的版本出现了深板岩层的矿石&#xff0c;我们要在BlockInit类中声明一个矿石的两种岩层形态&#xff1a; BlockInit.java package com.joy187.re8joymod.init;import com.joy187.re8joymod.Main; import net.minecraf…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.8 数据卷挂载案例1

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.8 数据卷挂载案例110.8.1 挂载数据卷10.8.2 案例10.8.3 总…

Pr:导出设置之高级设置及 VR 视频

视频 VIDEO设置因所选导出格式而异。每种格式都有独特的要求&#xff0c;这些要求决定了哪些设置可用。以导出文件格式为 H.264 为例&#xff0c;下面给出有关高级设置 Advanced Settings以及 VR 视频 VR Video的选项及说明。高级设置 Advanced Settings关键帧距离Key Frame Di…