在线赛题解以及总结

csdn英雄会题解之第五届在线编程大赛月赛第三题:石子游戏 --多堆博弈游戏 多堆拈游戏 题目详情 甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定。 两人轮流按下列规则取走一些石子,游戏的规则如下: 1.每一步应取走至少一枚石子; 2.每一步只能从某一堆中取走部分或全部石子; 3.如果谁无法按规则取子,谁就是输家。 如果甲乙两人都采取最优的策略,甲先拿,请问,是甲必胜还是乙必胜. 输入格式: 多组数据,每组数据两行,第一行是一个整数N, 2 下一行是N个 阅读详情

在线赛题解
A题:跑操
实际上题目没有想象中那么难 只是一些精度处理问题 什么*1.0啊 double之类的 四舍五入 搞来搞去很烦
也就是弄两个数组然后sort一波判一下先后

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cmath>
#include<string>
using namespace std;
int n;
int D[10005],T[10005];
int main(){
    cin>>n;
    int tot1=0,tot2=0;
    for(int i=1;i<=n;i++){
        char str[2];
        int x;
        scanf("%s %d",str,&x);
        if(str[0]=='D')D[++tot1]=x;
        else if(str[0]=='T')T[++tot2]=x;
    }
    sort(D+1,D+tot1+1);
    sort(T+1,T+tot2+1);
    double now=0,ans=0;
    int n1=1,n2=1,v=1;
    while(1){
        if(n1==tot1+1&&n2==tot2+1)break;
        double x=1.0*(T[n2]*1.0-ans)/(v*1.0);
        if(n1==tot1+1&&n2<=tot2){
            now+=x;
            ans=T[n2]*1.0;
            v++;n2++;
        }
        else if(n1<=tot1&&n2==tot2+1){
            ans+=(D[n1]*1.0-now)*v*1.0;
            now=1.0*D[n1];
            v++;n1++;
        }
        else {
        if(now+x<D[n1]*1.0){
            now+=x;
            ans=T[n2]*1.0;
            v++;n2++;
        }
        else if(now+x>D[n1]*1.0){
            ans+=1.0*(D[n1]*1.0-now)*v;
            now=D[n1]*1.0;
            v++;n1++;
        }
        else {
            ans+=1.0*(D[n1]*1.0-now)*v;
            now=D[n1]*1.0;
            n1++;n2++;
            v++;
            }
        }
    }
//  for(int i=1;i<=n;i++)cout<<A[i].str<<A[i].x<<endl;
//  printf("%.9lf",1.0*ans+(1000*1.0-now)*v*1.0);
    printf("%.0f\n",(ans+1.0*(1000*1.0-now)*v));
    return 0;
}

B:送信
可能是太久没有敲题目了 导致最基本的二分答案都没有想到 比赛时候一直想着暴搜和DP 想了好久的DP也就水了10分半

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cmath>
#include<string>
#include<cstdlib>
#define INF 2000000000
using namespace std;
int n,m,A[505][505],f[505][505];
int rx[]={1,0,-1,0};
int ry[]={0,1,0,-1};
struct node{int x,y;};
int xx,yy;
int cnt,cntt;
bool chk(int x,int y){
    if(x<=n&&x>=1&&y<=m&&y>=1)return true;
    return false;
}
int check(int x){
    queue<node> q;
    while(!q.empty())q.pop();
    node t;
    t.x=xx;t.y=yy;
    q.push(t);
    bool mark[505][505];
    memset(mark,0,sizeof(mark));
    mark[xx][yy]=1;
    while(!q.empty()){
        node now=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            node nxt;
            nxt.x=now.x+rx[i];
            nxt.y=now.y+ry[i];
            if(chk(nxt.x,nxt.y)&&!mark[nxt.x][nxt.y]&&abs(A[nxt.x][nxt.y]-A[now.x][now.y])<=x){
                mark[nxt.x][nxt.y]=1;
                q.push(nxt);
            }
        }
    }
    int cnt=cntt;
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mark[i][j]==1&&f[i][j]==1)cnt--;
    if(cnt==0)return true;
    return false;
}
int main(){
    int mx=0,mi=INF;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
        scanf("%d",&A[i][j]);mx=max(mx,A[i][j]);mi=min(mi,A[i][j]);
    }
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&f[i][j]);if(f[i][j]==1)cntt++;}
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
        if(f[i][j]==1){xx=i,yy=j;}
    }
}
    int l=0,r=mx-mi;
    int res=0;
    while(l<=r){
        int mid=(l+r)/2;
        if(check(mid)){
            res=mid;
            r=mid-1;
        }else l=mid+1;
    }
    cout<<res;
    return 0;
}

很简单的二分答案加BFS广搜 最后判一下是不是所有的1都能到达就OK了 代码敲起来很简单 也就十分钟左右

D:贝西的旅行

这题算是B题的升级版
如果每个点都进行二分答案无疑复杂度高达O(n^4logn)妥妥的超时
可以采用并查集加上整体二分
给每个点进行编号 然后把每条边都按权值从小到大排序
对每个1的点进行二分答案 把权值小于等于mid的边都并在一起
最后判一下size是不是大于k
二分20次后 差不多囊括了所有情况
最后把每个点的最小ans加起来即可 这样复杂度可以降到O(n^2logn)就不会超时啦(^__^) 嘻嘻……
PS:千万注意long long 数据可能很大
真是坑人~~(>_<)~~

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define M 250005
using namespace std;
int fa[M],size[M],h[505][505],f[505][505],n,m,k;
long long res;
struct node{
    int x,y,ans,l,r,mid;
}A[M];
struct nn{
    int u,to,v;
}S[M*2];
bool cmp(nn a,nn b){
    return a.v<b.v;
}
bool cmp1(node a,node b){
    return a.mid<b.mid;
}
int getfa(int x){
    if(fa[x]!=x)return fa[x]=getfa(fa[x]);
    return x;
}
int main(){
    scanf("%d %d %d",&n,&m,&k);
    int cnt=0;
    int tot=0;
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&h[i][j]);
    for(int i=1;i<n;i++){
        for(int j=1;j<m;j++){
        tot++;
        S[tot].u=(i-1)*m+j;S[tot].to=(i-1)*m+j+1;S[tot].v=abs(h[i][j]-h[i][j+1]);
        tot++;
        S[tot].u=(i-1)*m+j;S[tot].to=i*m+j;S[tot].v=abs(h[i][j]-h[i+1][j]);
        }
    }
    for(int j=1;j<m;j++){
        tot++;
        S[tot].u=(n-1)*m+j;S[tot].to=(n-1)*m+j+1;S[tot].v=abs(h[n][j]-h[n][j+1]);
    }
    for(int i=1;i<n;i++){
        tot++;
        S[tot].u=(i-1)*m+m;S[tot].to=(i)*m+m;S[tot].v=abs(h[i][m]-h[i+1][m]);
    }
    sort(S+1,S+tot+1,cmp);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            scanf("%d",&f[i][j]);
            if(f[i][j]){
                A[++cnt].x=i;
                A[cnt].y=j;
                A[cnt].l=1;
                A[cnt].r=tot;
                A[cnt].mid=(A[cnt].l+A[cnt].r)/2;
            }
        }
    int t=0;
    while(t<=20){
        sort(A+1,A+cnt+1,cmp1);
        for(int i=1;i<=n*m;i++)fa[i]=i,size[i]=1;
        for(int i=1;i<=cnt;i++){
            for(int j=1;j<=A[i].mid;j++){
                int x=getfa(S[j].u);
                int y=getfa(S[j].to);
                if(x!=y){
                    fa[x]=y;
                    size[y]+=size[x];
                }
            }
            if(size[getfa((A[i].x-1)*m+A[i].y)]>=k){
                A[i].r=A[i].mid-1;
                A[i].ans=S[A[i].mid].v;
                A[i].mid=(A[i].l+A[i].r)/2;
            }
            else{
                A[i].l=A[i].mid+1;
                A[i].mid=(A[i].l+A[i].r)/2;
            }
        }
        t++;
    }

//  for(int i=1;i<=tot;i++){
//      printf("%d %d %d\n",S[i].u,S[i].to,S[i].v);
//  }
    for(int i=1;i<=cnt;i++)res+=A[i].ans;
    cout<<res;
    return 0;
}
/*
3 5 10
20 21 18 99 5
19 22 20 16 17
18 17 40 60 80
1 0 0 0 0
0 0 0 0 0
0 0 0 0 1
*/
洛谷新手入门指南:从零到高效刷题的系统方法 在线评测系统(Online Judge, OJ)是算法学习和编程能力训练的核心平台,它通过自动化评测机制为代码提供即时反馈。其工作原理是用户提交代码后,系统在沙箱环境中运行,并与预设的测试用例进行比对,从而判定结果。这种技术对于掌握数据结构与算法、提升编程思维和代码调试能力具有重要价值,广泛应用于编程竞赛、技术面试准备和日常技能训练。在众多OJ平台中,洛谷(Luogu)以其丰富的题库、活跃的社区和强大的社交功能脱颖而出。本文聚焦于**新手入门**和**高效刷题**,旨在帮助初学者快速掌握平台核心功能,建立系 阅读详情

相关推荐

实验5 振幅调制(集成乘法器幅度调制电路)

目录5-1 振荡调制的基本工作原理一.振幅调制和调幅波1.普通调幅波(AM)(1)调幅波的表达式、波形(2)调幅波的频谱2.抑制载波双边带调幅(DSB)3.抑制载波单边带调幅(SSB)二.普通调幅波的产生电路三.抑制载波调幅的产生电路5-2 振幅调制实验电路 5-1 振荡调制的基本工作原理 根据电磁波理论知道,只有频率较高的振荡才能被天线有效地辐射。但是人的讲话声音变换为相应电信号的频率较低,不适于直接从天线上辐射。因此,为了传递信息,就必须将要传递的信息“记载”到高频振荡上去。这一“记载”过程称为调

胡毛毛的博客 3万+

ICPC程序设计题解系列

ICPC亚洲区域赛题解系列 The 2019 ACM-ICPC China Shannxi Provincial Programming Contest题解 - 海岛Blog - 优快云博客 2019 ICPC中国邀请赛(南昌)暨国际丝绸之路程序设计竞赛-网络赛题解 - 海岛Blog - 优快云博客 2018-2019 ACM-ICPC, Asia Nanjing Regional Co...

海岛Blog 2872

别再怕ADRC调参了!手把手教你用MATLAB/Simulink搞定TD、ESO、NLSEF(附完整参数表)

本文详细解析了ADRC(自抗扰控制)的调参方法,通过MATLAB/Simulink实战演示,帮助工程师快速掌握TD、ESO和NLSEF模块的参数整定技巧。文章提供了完整的参数表和调参指南,解决ADRC调参难题,提升控制系统的鲁棒性和性能。

weixin_30252709的博客 177

2026蓝桥杯第十七届省赛各组真题汇总【收藏】

3.还可以自己举办比赛,把这些题加入到限时比赛中,用于自己或者老师赛后复盘,或者备赛训练。目前全网最全的蓝桥杯真题汇总,每个组都有了,一个题不差!

Dotcpp 1433

基于Simulink的IEEE33节点配电网仿真实战:从建模到分布式能源集成

本文详细介绍了基于Simulink的IEEE33节点配电网仿真实战,从基础建模到分布式能源集成。通过MATLAB脚本管理参数、搭建Simulink模块,并集成风机和光伏系统,实现高效配电网仿真。文章还涵盖潮流计算、故障分析及性能优化技巧,为电力系统仿真提供实用指导。

git9versioner的博客 990

BUCK电路的大信号模型与小信号模型推导

推导开关电源信号模型的核心是将非线性开关过程线性化,常用。如需具体拓扑的推导细节,可进一步说明!

创新改变世界! 1169

2018蓝桥杯算法c++/javaA、B、C组 题解 省赛题目在线测评 解题思路

字母阵列https://www.lanqiao.cn/problems/621/learning/ 主要思路 找到’L’ 然后 八个方向迭代即可。(emm 一定得是八条射线遍历,不是八皇后那种随机八个方向,所以在dfs中用for即可) #include<string> #include<algorithm> #include<iostream> using namespace std; const int N = 110; string s[N]; const str

林夕丶的博客 1042

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

蓝桥杯省赛历年真题解2015-2022

蓝桥杯比赛中,可以使用的语言有C/C++,Java和Python。 程序的关键在于编程技巧、数据结构和算法,所以这里的题解均用C/C++语言来写。 参考这些题解很容易写出有关语言的解题程序。

海岛Blog 2606

AutoCAD 2024 Mac版安装激活教程:从下载到破解一站式解决方案

本文提供AutoCAD 2024 Mac版的详细安装与优化指南,包括系统要求检查、下载安装流程、常见问题解决方案及性能优化设置。特别介绍了如何应用最新补丁和Update保持软件性能,帮助用户顺利完成从安装到破解的全过程。

weixin_29239661的博客 840

【城市数据集】世界城市数据库和访问门户工具WUDAPT

简介世界城市数据库和访问门户工具WUDAPT

WW、forever的博客 1286

蓝桥杯历届刷题

:) 2021年 十二届 省赛 第二场 时间显示 原题连接 题解 砝码称重 原题连接 题解 杨辉三角 原题连接 题解

weixin_48720919的博客 684

IgH EtherCAT 从入门到精通:第 2 章 环境搭建与编译安装

环境搭建与编译安装指南 本章详细介绍了搭建IgH EtherCAT Master开发环境的完整流程。内容包括: 硬件要求:支持多种Intel和Realtek网卡的原生驱动,以及通用网卡的generic驱动选项 软件依赖:列出Linux系统下所需的工具链和开发包 源码获取:通过Git克隆官方仓库并切换稳定版本的方法 配置选项:详细解析bootstrap脚本和configure的核心参数,包括路径设置、功能开关和实时框架选项 编译流程:从生成构建系统到最终编译安装的完整步骤 通过本章指导,读者可以完成一个可运行

从事嵌入式linux android驱动开发,拥有全栈能力 478

【题解】 英雄会-第五届在线编程大赛月赛第二题:走格子

题目详情 我们有一个两行n列格子的棋盘,你可以从任何位置出发。每次你可以沿着上下左右以及对角线的方向走一格(不能出去),求有多少条可能的哈密尔顿路?(即所有的格子只经过一次的路。) 例如: a b c d e f 一条可能的路径是b,f,c,e,d,a 输入格式: 多组数据,每组数据1行,包含一个正整数n表示列数。 (n <= 1

gscienty的专栏 1221

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

洛谷 语言月赛 202404 题目

洛谷 语言月赛 202404

青少年趣味编程 693

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2016 ACM/ICPC Asia Regional Qingdao Online(2016ACM青岛网络赛部分题解)

2016 ACM/ICPC Asia Regional Qingdao Online(部分题解) 5878---I Count Two Threehttp://acm.hdu.edu.cn/showproblem.php?pid=5878 Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/O...

weixin_30780649的博客 206

2019届南阳理工学院组队赛第七场题解

第七场组队赛 比赛链接https://vjudge.net/contest/297070 密码 nyist 题解链接如下 A 题 B 题:https://blog.youkuaiyun.com/Dch19990825/article/details/89489828 C 题:https://blog.youkuaiyun.com/nuoyanli/article/details/89480749 D 题: E 题: F...

qq_34343735的博客 226

2025年12月GESP(C++)考级真题及详细题解(汇总版)

2025年12月GESP(C++)考级真题及详细题解(汇总版)

王老师青少年编程 3086

洛谷(luogu)简介

洛谷(Luogu)是国内知名的综合性计算机科学学习平台,集题库、在线评测、题解分享和竞赛于一体。平台拥有海量算法题目和实时评测系统,支持多种编程语言在线IDE,提供云剪贴板、图床等实用工具。其活跃社区鼓励高质量题解交流,并定期举办各类算法赛事。洛谷特别适合信息学竞赛选手和编程爱好者,建议新手从基础题单入手,注重独立思考与规范编码,积极参与社区互动。平台通过丰富的资源和友好的氛围,成为程序员成长路上的重要伙伴。

C++ 狂魔!!!偶尔会写 C 语音!!! 1823

21级新生郑轻acm第一次周赛题解

郑轻第一次周赛题: 本人河南某双非菜鸡,第八题和第十题有一点思路,但因上课没时间写了,前7题差不多花了2小时,第5题和7题卡了部分时间,下面全为python代码,看不懂没关系,就当伪码看吧,大概思想还是能够理解的???? 1.火柴棒: 题目思路: 数位拆分,根据0-9对应的火柴棒个数,对其进行累加 避坑指南:如果n = 0 时,按照数位拆分时不需要拆分的,但是0确实需要6根火柴棒 难度系数:⭐⭐ n = int(input()) nums = [] ans = 0 if n == 0: ans +

qq_52180526的博客 6288

csdn英雄会题解之第五届在线编程大赛月赛指定题目:反向互补子串

下周EAST要放电了,今天整了一天的控制式

enockipp的小'码'头 2100

第十五届蓝桥杯省赛PythonB组B题【数字串个数】题解(AC)

【代码】第十五届蓝桥杯PythonB组B题数字串个数题解。

一只大采集~ 3772

8.26组队赛

补了差不多5个题,先把4个题的题解先写了。。。我感觉再不写,过几天更不会写了。。。男神的演唱会 XDOJ 1060题目链接http://acm.xidian.edu.cn/problem.php?id=1160题解每个人每个时间段都有一个可能的不同状态,可能在也可能不在,对于每个询问,我们维护当前在听演唱会的这么一个人的集合,在线查询的,按照时间,依次往后推移。代码#include<iostream

xgogoforit的博客 2318

BUUCTF—Web解题合集

BUUCTF是一个CTF竞赛训练平台,提供各类真实赛题在线复现服务。本文整理了多个赛事的解题记录,包含命令注入、SQL注入、文件包含和文件上传等常见漏洞类型,如[GXYCTF2019]Ping Ping Ping、[强网杯2019]随便注等典型题目,每道题均附详细题解链接。这些内容适合CTF选手学习参考,帮助提升不同漏洞类型的实战能力。 写于2023/11/28

ZZHow Blog 446

最新开源,阿里腾讯等大厂强推:Github千道算法题详解Cookbook笔记

直译的话就是烹饪书,教你做各种食谱美食的书。经常看 O’Reilly 技术书的同学对这个名词会很熟悉。一般动手操作,实践类的书都会有这个名字。篇幅原因,仅展示部分截图,文末即可免费获取。

Trouvailless的博客 281

CSU_BMW正式组队纪念赛将于3月4日(周日)在中南大学OJ举行

    为祝贺CSGrandeur师兄考研顺利并回归ACM,为纪念CSU_BMW正式组队,CSU_BMW各队员swimming(Burn-E),Staginner(M-O),CSGrandeur(Wall-E)决定联合命题并举办一场纪念赛,欢迎各位校内外同学来玩O(∩_∩)O~     比赛时间:2012.03.04(周日) 12:00-17:00    比赛形式:网络赛    比赛地址:中...

weixin_33738555的博客 177
上一篇: 刷漆升级线段树优化
下一篇: USACO2014JanuaryGold
With_thewind
博客等级 码龄10年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值