7.18训练总结

news2024/10/6 16:28:53

考场错误:

今天是一套neerc的题,难度相对较大,我犯的低级错误比较少,但是对于题目顺序的把握能力,应该提高,尝试去做自己擅长的题目,而不是跟着别人的开题顺序,这样能够更顺畅吧。

经验教训是,构造题,想不出来尽快撤,不要死磕!

Problem C. Connections

这道题目浪费了较长时间

其实很简单,因为题目保证了任意两点之间能够互相到达,所以我们可以通过直接从1开始dfs记录那些边被经过了,再在反图上从1开始dfs,两次走过的边的并集保留,剩下的都可删除,显然这样需要留下的边小于等于2n-2

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int T,n,m;
struct edge
{
    int nxt,to,v,fr;
}e[maxn],f[maxn];
int tot,head[maxn],h[maxn];
int vis[maxn],used[maxn];
void add(int x,int y)
{
    e[++tot].to=y; e[tot].nxt=head[x]; head[x]=tot; e[tot].fr=x;
    f[tot].to=x; f[tot].nxt=h[y]; h[y]=tot;
}
void dfs(int u)
{
    for(int i=head[u];i;i=e[i].nxt)
    {
        int to=e[i].to;
        if(!vis[to])
        {
            vis[to]=1;
            used[i]=1;
            dfs(to);
        }
    }
}
void ddfs(int u)
{
    for(int i=h[u];i;i=f[i].nxt)
    {
        int to=f[i].to;
        if(!vis[to])
        {
            vis[to]=1;
            used[i]=1;
            ddfs(to);
        }
    }
}
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m); tot=0;
        for(int i=1;i<=m;i++) h[i]=head[i]=vis[i]=used[i]=0;
        for(int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            add(x,y);
        }
        dfs(1);
        for(int i=1;i<=n;i++) vis[i]=0;
        ddfs(1);
        int gs=m-2*n;
        for(int i=1;i<=tot && gs;i++)
        {
            if(!used[i])
            {
                printf("%d %d\n",e[i].fr,e[i].to);
                gs--;
            }
        }
    }
    return 0;
}

Problem A. Archery Tournament

这道题目的重点是发现对于一个横坐标来说,最多有log级别的圆与它相交,证明可以根据相切的情况是极限,是1/4即可,说明如下:

 

那么我们需要做的就是把一个区间[x-r,x+r]内,打上这个圆的编号,然后查询时,访问这一点的所有圆即可

可以通过线段树维护set暴力地实现!

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int inf=1e9;
set <int> tr[maxn<<5];
int ls[maxn<<5],rs[maxn<<5],tot;
int n,px[maxn],R[maxn];
void update(int &u,int l,int r,int L,int R,int id,int flag)
{
    if(!u) u=++tot;
    if(L>r || R<l) return;
    if(l>=L && r<=R)
    {
        // cerr<<l<<" "<<r<<endl;
        if(flag==1) tr[u].insert(id);
        else tr[u].erase(id);
        return;
    }
    int mid=l+r>>1;
    if(L<=mid) update(ls[u],l,mid,L,R,id,flag);
    if(mid<R) update(rs[u],mid+1,r,L,R,id,flag);
}
ll sqr(int x)
{
    return 1ll*x*x;
}
int query(int u,int l,int r,int x,int y)
{
    // cerr<<u<<" "<<l<<" "<<r<<endl;
    if(!u) return -1;
    if(l<=x && x<=r)
    {
        for(auto iter=tr[u].begin();iter!=tr[u].end();iter++)
        {
            // cerr<<x<<" "<<y<<" "<<*iter<<endl;
            if(sqr(x-px[*iter])+sqr(y-R[*iter])<sqr(R[*iter]))
                return *iter;
        }
        // return;
    }
    int mid=l+r>>1;
    if(x<=mid) return query(ls[u],l,mid,x,y);
    else return query(rs[u],mid+1,r,x,y);
}
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%d",&n);
    int rt=0;
    for(int i=1;i<=n;i++)
    {
        int op,x,y;
        scanf("%d%d%d",&op,&x,&y);
        if(op==1)
        {
            px[i]=x; R[i]=y;
            update(rt,-inf,inf,x-y,x+y,i,1);
            // cerr<<tot;
            // cerr<<ls[1]<<" "<<rs[1]<<endl;
        }
        else
        {
            int id=query(rt,-inf,inf,x,y);
            if(id==-1)
                printf("-1\n");
            else
            {
                printf("%d\n",id);
                update(rt,-inf,inf,px[id]-R[id],px[id]+R[id],id,-1);
            }
        }
    }
    return 0;
}

Problem D. Designing the Toy

不妨设a<=b<=c

首先,我们发现但ab<c一定无法构造,这样我们就可以使用

构造方式就是全部放在z=0平面上,那么我们放a个在对角线上,剩下b-a个放在最后一个对角线上的点再接着向上延伸,c-a-b的点放在矩形围成的剩余位置

 

具体实现时,不同的轴的对应关系很难受,调了很久,,,

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
pair <int,int> val[4];
int p[1005][4];
int cnt,G[105][105],X,Y,Z;
void add(int x,int y,int z)
{
    p[++cnt][X]=x; p[cnt][Y]=y; p[cnt][Z]=z;
}
void work(int A,int B,int C)
{
    int tot=0;
    A--; B--;
    while(tot<=A)
    {
        add(tot,tot,0);
        G[tot][tot]=1;
        tot++;
    }
    while(tot<=B)
    {
        add(A,tot,0);
        G[A][tot]=1;
        tot++;
    }
    // for(int i=0;i<A;i++)
    // {
    //     if(C==tot) break; 
    //     for(int j=0;j<=B;j++)
    //     {
    //         if(C==tot) break;
    //         if(!G[i][j])
    //         {
    //             G[i][j]=1;
    //             add(i,j,0);
    //             tot++;
    //         }
    //     }
    // }
    for(int i=0;i<=A;i++)
    {
        if(C==tot) break; 
        for(int j=0;j<=B;j++)
        {
            if(C==tot) break;
            if(!G[i][j])
            {
                G[i][j]=1;
                add(i,j,0);
                tot++;
            }
        }
    }
}
void dw(int x,int y,int z)
{
    X=x; Y=y; Z=z;
}
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%d%d%d",&a,&b,&c);
    val[1]=make_pair(a,1);  val[2]=make_pair(b,2);  val[3]=make_pair(c,3);
    sort(val+1,val+4);
    if(val[3].first>val[1].first*val[2].first)
    {
        printf("-1\n");
        return 0;
    }
    if(a>=b && a>=c)
    {
        if(b>=c)
            dw(1,0,2),work(c,b,a);
        else
            dw(0,1,2),work(b,c,a);
    }
    else if(b>=a&&b>=c)
    {
        if(a>=c)
            dw(2,0,1),work(c,a,b);
        else
            dw(0,2,1),work(a,c,b);
    }
    else if(c>=a&&c>=b)
    {
        if(a>=b)
            dw(2,1,0),work(b,a,c);
        else
            dw(1,2,0),work(a,b,c);
    }
    // cerr<<X<<" "<<Y<<" "<<Z;
    printf("%d\n",cnt);
    for(int i=1;i<=cnt;i++)
    {
        for(int d=0;d<3;d++)
            printf("%d ",p[i][d]);
        printf("\n");
    }
    return 0;
}

Problem G. The Great Wall

首先观察到答案求的是第k大的方案,可以二分答案,问题转变为求<=mid的方案数

这道题目我们考虑初始的贡献是ai的和,然后我们考虑两个线段的影响,

case1 如果两个线段不相交

那么就是两段bi-ai的和,我们枚举第一段的位置,第二段的和的大小和位置都有要求相当于二维数点问题,在O(nlogn)内可以解决

case 2 如果两个线段相交

 这样总的复杂度就是两个log

代码待补

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

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

相关文章

实验室LIMS系统检测工作流程

LIMS系统检测工作流程 检测工作流程是LIMS核心内容&#xff0c;通过检测工作管理可加强协同工作能力、进一步强化质量控制环节、提高数据报出速度&#xff0c;提高工作效率、减低数据出错率&#xff0c;保证质量记录的完整、监控规范的执行&#xff1b;检测流程以样品检测为主…

Jenkins | 获取凭证密码

目录 方法一&#xff1a;查看所有账号及密码 方法二&#xff1a;查看指定账号密码 方法一&#xff1a;查看所有账号及密码 Jenkins > 系统管理 > 脚本命令行 com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{i…

element-ui message消息提示组件 ①延长提示消息在页面停留时间②提示消息换行

以实现下面的效果为示例 完整代码&#xff1a; let msgList ["数据1被引用", "数据2被引用"];// 使用html的换行标签拼接信息&#xff0c;默认行距太小&#xff0c;此处用两个<br/><br/>let message 以下数据不能删除&#xff0c;原因是&…

【Spring core学习四】Bean作用域和生命周期

目录 一、Bean的作用域 &#x1f308;1、被修改的Bean值现象 &#x1f308;2、 Bean 的 6 种作⽤域 &#x1f308;3、设置作用域 二、Spring的执行流程 三、Bean的生命周期 &#x1f308;1、Bean生命周期的过程 &#x1f308;2、演示生命周期 一、Bean的作用域 &…

[MySql]JDBC编程

JDBC&#xff0c;即Java Database Connectivity&#xff0c;java数据库连接。是一种用于执行SQL语句的Java API&#xff0c;它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成&#xff0c;它为Java开发人员操作数据库提供了一个标准的API&…

全域Serverless化,华为云引领下一代云计算新范式

近日&#xff0c;华为开发者大会2023&#xff08;Cloud&#xff09;在东莞成功举办&#xff0c;期间“全域Serverless化&#xff0c;引领下一代云计算新范式”专题论坛人气满满。华为云首席产品官方国伟携手业界专家、客户、伙伴&#xff0c;面向广大开发者&#xff0c;分享了在…

Authing 身份云上线数据对象管理(元数据),助力企业构建唯一身份源

在身份管理领域&#xff0c;元数据具有重要的作用和价值。元数据有助于理解数据的结构和意义&#xff0c;提升数据处理效率&#xff1b;促进跨部门、跨组织的数据共享和协作&#xff1b;以及支持数据分析&#xff0c;为业务决策提供支持等。当前&#xff0c;Authing 身份云已经…

在ICC/ICC2/FC中运行Calibre

1. which calibre找到calibre的安装目录 > which calibre > /eda/mentor/ixl_cal_version/bin/calibre 2. 在 /eda/mentor/ixl_cal_version目录下使用find ./* -name "icc_calibre.tcl",找到icc_calibre.tcl 3. 打开icc_calibre.tcl里面有不同工具(ICC2/FC/…

《Linux0.11源码解读》理解(五) head之开启分页

先回顾一下地址长度以及组合的演变&#xff1a;16位cpu意味着其数据总线/寄存器也是16位&#xff0c;但是地址总线&#xff08;寻址能力&#xff09;与此无关&#xff0c;可能是20位。可以参考&#xff1a;cpu的位宽、操作系统的位宽和寻址能力的关系_cpu位宽_brahmsjiang的博客…

C++——map和set(multimap和multiset)

目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 multiset 3.2.1 multiset的介绍 3.2.2 multiset的使用 3.3 map 3.3.1 map的介绍 3.3.2 map的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用 …

抖音小店选品攻略:10个技巧助你选择助轻松学会选品技巧

抖音小店是目前非常火爆的电商平台之一&#xff0c;许多商家都希望能在抖音上开设自己的小店。而在开设抖音小店之前&#xff0c;选品是一个非常重要的环节。下面是不若与众总结的一些抖音小店选品技巧&#xff0c;希望能帮助到你。 1. 确定目标受众&#xff1a;在选品之前&…

数据库应用:MySQL高级语句

目录 一、理论 1.常用查询 2.函数 3.进阶查询 二、实验 1.普通查询 2.函数 3.进阶查询 三、问题 1.MySQL || 运算符不生效 四、总结 一、理论 1.常用查询 常用查询包括&#xff1a;增、删、改、查&#xff1b; 对 MySQL 数据库的查询&#xff0c;除了基本的查询外…

(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

客户端突然出现故障 客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候&#xff0c;如果服务端一直不会发送数据给客户端&#xff0c;那么服务端是永远无法感知到客户端宕机这件事的&#xff0c;也就是服务端的TCP连接将一直处于ESTABLISH 状态&…

两巨头强强联手!美国EB-5投资移民新项目侨外出国首发

7月15日&#xff0c;在侨外出国“见证辉煌历史 重启明日新章”的主题活动中&#xff0c;一个全新乡村EB-5投资移民项目——峰堡长岭天然气开发项目正式扬帆起航。 这一项目&#xff0c;由两大行业巨头——侨外出国和CanAm基金强强联手。众所周知&#xff0c;侨外出国是EB-5投资…

并发编程中常见的锁策略

本文介绍一些常见的锁策略。 锁策略是多线程编程中相对进阶的内容&#xff0c;它不仅仅局限于Java&#xff0c;任何和“锁”相关的话题&#xff0c;都可能会涉及到这些内容&#xff1b;即使是别的语言&#xff0c;只要涉及到“锁”&#xff0c;也都会涉及到锁策略。 锁策略的…

px4上传数据waiting for bootloader

输入make px4_fmu-v6c_default upload&#xff0c;出现waiting for bootloader 原因&#xff0c;可能是启动了QGC占用了端口&#xff0c;把QGC关掉&#xff0c;重新上电&#xff0c;就OK了。

C++ 继承与多态的基本用法

目录 1.继承 1.1访问等级 1.2函数遮蔽 2.多态 2.1虚函数 1.继承 有父类&#xff0c;有子类&#xff0c;这种层次关系就叫继承&#xff0c;也就说说子类能从父类哪里继承很多东西&#xff0c;继承这种概念或性质是面向对象程序设计的核心思想之一。 这种继承需要先定义一个父…

TS类型断言、函数重载踩过的坑

任意属性 interface Person {name: string;age?: number;[propName: string]: string;//报错 } let tom: Person {name: Tom,age: 25,gender: male }; 任意属性需要包含确定属性和可选属性的类型&#xff1a;[propName: string]: string|number; 类型断言 &#x1f449;在…

zabbix企业级监控(监控第二台linux服务器安装部署)接上篇单台监控文章操作

zabbix企业级监控监控linux主机 目录 【agent端配置】&#xff08;监控第二台linux服务器&#xff09; 1、源码安装zabbix&#xff08;解包、编译、配置、安装&#xff09; 2、改agent配置文件 3、启动服务 图形操作&#xff1a; 【agent端配置】&#xff08;监控第二台l…

批处理判断目录是否存并且删除非空目录

这个功能很常用&#xff0c;但是偶尔总是忘记写法&#xff0c;这里贴一个亲测通过的例子吧。 ECHO OFF CLS if exist DirName ( rmdir /q /s DirName ) ELSE ( echo dir NOT exist!)这个例子的功能非常简单&#xff0c;判断目录DirName是否存在&#xff0c;存在就删除&#x…