20171007离线赛总结

edp 千1.docx 立即下载

考试时的思路:

第一题先循环水一个80分出来
 
第二题先水70分,再用倍增枚举每一个坦克对应的下一个坦克。
 
第三题直接上DFS,能拿多少拿多少。

题解:

第一题 S数

  这道题,我打了个表,然后用二分法来做,记录每个答案的位置,即可得解。但是最后时间不够了,我发现lower_bound用错了的时候只剩下4分钟了,匆忙修改,但还是没对,不过好在暴力分拿到了,看来先打暴力这个方法肯定没错。
  

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#define M 100086
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int sum[M];
void Init() {
    FOR(i,1,M-1) {
        int x=i;
        while(x) {
            sum[i]+=x%10;
            x/=10;
        }
    }
}
int n,m;
int A[]= {}//打表
void solve1() {
    Init();
    int ans=0;
    FOR(i,n,m) {
        long long x=i*i;
        int cnt=0;
        while(x) {
            cnt+=x%10;
            x/=10;
        }
        if(cnt==sum[i]*sum[i])ans++;
    }
    cout<<ans<<endl;
}
void solve2() {
    int x,y;
    y=lower_bound(A+1,A+sizeof(A)/4,m)-A-1;
    x=lower_bound(A+1,A+sizeof(A)/4,n)-A-1;
    cout<<y-x<<endl;
}
int main() {
    cin>>n>>m;
    if(m<=1e5)solve1();
    else solve2();
    solve2();
    return 0;
}

  
  这道题有没有更好的算法呢?
  显然有。
  首先我们分析一下最大的数也就是18个9,那么加起来也就是9*18,开个方也就在12左右,只要根据这个来DFS就可以了,还是非常简单的,就看这一点有没有想到。

第二题 黑客入侵

  这道题,首先暴力就70分,少了点儿,因此我就考虑到了看电视这道题,用同样的思路,每一个坦克所对应的下一辆坦克是固定的,因此只要用倍增法求出有多少辆坦克没被打到,就可以顺势求出有多少辆坦克被打了。这种算法,还真没人这么写过,虽然麻烦了点,但正确性显然啊,特别是熟练使用倍增之后,如同行云流水一般,刷刷刷代码就打完了。
  

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#define M 200050
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
struct node {
    int pos,attack;
} A[M],B[M];
int ans=1e9;
bool mark[M];
int n;
int Fa[20][M];
void solve1() {
    DOR(i,n+1,1) {
        int cnt=n+1-i;
        memset(mark,0,sizeof(mark));
        DOR(j,i-1,1) {
            if(mark[j])continue;
            int x=A[j].pos-A[j].attack;
            DOR(k,j-1,1) {
                if(A[k].pos>=x) {
                    mark[k]=true;
                    cnt++;
                } else break;
            }
        }
        if(cnt<ans)ans=cnt;
    }
    cout<<ans<<endl;
}
int cnt[20][M];
void Init() {
    FOR(i,1,n)B[i]=A[n-i+1];
    FOR(i,1,n) {
        int x=B[i].pos-B[i].attack;
        FOR(j,i+1,n) {
            if(B[j].pos>=x)continue;
            Fa[0][i]=j;
            break;
        }
    }
    FOR(i,1,n)cnt[0][i]=1;
    FOR(j,1,19)FOR(i,1,n) {
        Fa[j][i]=Fa[j-1][Fa[j-1][i]];
        cnt[j][i]=cnt[j-1][i]+cnt[j-1][Fa[j-1][i]];
    }
}
void solve2() {
    Init();
    FOR(i,0,n-1) {
        int tmp=0;
        int t=i+1;
        FOR(j,0,19) {
            tmp+=cnt[j][t];
            t=Fa[j][t];
        }
        if(n-tmp<ans)ans=n-tmp;
    }
    cout<<ans<<endl;
}
int main() {
    cin>>n;
    FOR(i,1,n)scanf("%d%d",&A[i].pos,&A[i].attack);
    if(n<=2000)solve1();
    else solve2();
    return 0;
}

  其实其他的大佬的代码比我更精简,想法也不错,所以可以看一看zhowie大佬的博客以及YZK大佬的博客。

第三题:炮兵

  这道题我DFS写错了,但是迷之水了40分,我也很无奈啊。
  错误示范:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
int n,m;
bool pic[120][20];
char s[20];
bool mark[120][20];
int ans=0;
bool tmp[120][20];
void dfs(int x,int y,int cnt) {
    if(cnt>ans)ans=cnt;
    FOR(i,1,n)FOR(j,1,m)tmp[i][j]=mark[i][j];
    FOR(i,1,n)FOR(j,1,m)if(!mark[i][j]) {
        int top=max(1,i-2);
        int tail=min(i+2,n);
        FOR(k,top,tail)mark[k][j]=true;
        int top1=max(1,j-2);
        int tail1=min(j+2,m);
        FOR(k,top1,tail1)mark[i][k]=true;
        dfs(i,j,cnt+1);
        FOR(k,top,tail)mark[k][j]=tmp[k][j];
        FOR(k,top1,tail1)mark[i][k]=tmp[i][k];
    }
}
int main() {
    cin>>n>>m;
    FOR(i,1,n) {
        scanf("%s",s+1);
        FOR(j,1,m)pic[i][j]=(s[j]=='H');
    }
    FOR(i,1,n)FOR(j,1,m)mark[i][j]=pic[i][j];
    dfs(0,0,0);
    cout<<ans<<endl;
    return 0;
}

  可以清楚地看到,在还原现场的时候,看上去好像没什么错,用tmp数组来维护原来的数组,但是,在往下dfs的时候,tmp数组又重新赋值了,导致tmp数组用了跟没用一样,这就解释了为什么我接下来造了一组100×10的数据,每个都是P,却3毫秒跑出来。但是,水了40分过来,这次可以说是侥幸,下次如果数据比较强的话,就没那么好的运气了,这点要注意,千万不能让暴力的分数也丢了。
  这道题的正解是状态压缩dp,每一个点只与前一个点,以及上面第二个点有关系,因此可以用dp[i][j][k]来表示前i行放完,第i-1行放坦克情况为j,第i行状态为k的情况,具体正解,请见YZK大佬的代码。
  

#include<iostream>
#include<cstdio>
#include"cstring"
#define M 105
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int pic[M][15];
int dp[M][65][65];
int flag[65];
char s[15];
void checkmax(int &a,int k) {
    if(a==-1 or a<k)a=k;
}
int cnt[M*10];
int n,m;
int t=0;
void create() {
    FOR(i,0,(1<<m)-1) {
        if(i&(i<<1))continue;
        if(i&(i<<2))continue;
        if(i&(i>>1))continue;
        if(i&(i>>2))continue;
        flag[++t]=i;
        FOR(j,0,m-1)if(i&(1<<j))cnt[i]++;
    }
}
int ShimaKZ[M];
int ans=0;
int main() {
    cin>>n>>m;
    create();
    memset(dp,-1,sizeof(dp));
    FOR(i,1,n) {
        scanf("%s",s+1);
        FOR(j,1,m)if(s[j]=='H')ShimaKZ[i]|=(1<<(m-j));
    }
    dp[0][1][1]=0;
    FOR(i,1,n)FOR(j,1,t)FOR(k,1,t) {
        if(flag[j]&flag[k])continue;
        if(not(~dp[i-1][j][k]))continue;
        FOR(l,1,t) {
            if(flag[j]&flag[l])continue;
            if(flag[k]&flag[l])continue;
            if(flag[l]&ShimaKZ[i])continue;
            checkmax(dp[i][k][l],dp[i-1][j][k]+cnt[flag[l]]);
        }
    }
    FOR(i,1,t)FOR(j,1,t)checkmax(ans,dp[n][i][j]);
    cout<<ans<<endl;
    return 0;
}

总结:

  这次考得一般吧,该水的分都水过来了,有些小问题还是要注意,还有一些解法要总结一下。

产业园区运营负责人如何提升园区企业的技术需求对接效率和转化成功率?.docx 产业园区运营负责人如何提升园区企业的技术需求对接效率和转化成功率? 立即下载

相关推荐

产业园区运营负责人如何提升园区内企业与科研机构的协同创新能力?.docx

产业园区运营负责人如何提升园区内企业与科研机构的协同创新能力?

初赛问题求解选集

zhowie大佬传送门YZK大佬传送门社会瑞姐传送门NOIP2005第一题答案:5。 解析:选择排序的原理。对于按顺序扫描的i,每次在i的后面选择一个最小的和i交换。 这5次分别交换( 32,25 ),( 74,28 ),( 43,53 ),( 58,47 ),( 47,86 )第二题答案:11011. 解析:当此时有x根火柴,当且仅当x%3==0时,x是必败的。 反之,如果x%3=a(

ShimaKZ的博客 1044

数字高校智慧校园AI知识库平台规划方案(决策评审版).pptx

数字高校智慧校园AI知识库平台规划方案(决策评审版).pptx

NOIP2011提高组 DAY2 题解&总结

考试时的心态:   这次离线赛考的是NOIP2011,考得比较差,其实试卷比较水,水出新高度了。但是就考了160分,还是因为大意了,说实话,我一直在想第二题那个Sigma 是怎么计算的,很虚。虽然最后证明我的想法是正确的,但是由于这道题花的时间太少了,导致我WA了。就30分……   第三题玄学贪心水了30分,还是比较好的,就是第二题可惜了。题解:第一题:计算系数   这道题是道水题,纯属送分,

ShimaKZ的博客 989

科技中介服务机构如何提升技术交易撮合的精准度与成功率?.docx

科技中介服务机构如何提升技术交易撮合的精准度与成功率?

国央企创新负责人如何通过平台实现科技成果的定向匹配与快速转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

NOIP2007 初赛赛后总结

错误题号选择题:2,5,9,12,13,20第二题  这道题完全是道常识题。然而……我不知道……答案是E,二维表。第五题  这道题的关键是^的优先级高于|,因此先计算^。运算符优先级第九题  这道题是一道图论题,对于D有如下反例,这题我完全靠懵   第十二题  漏了一个选项,还是不够细心第十三题  算错了ORZ!!!都是不该失的分。第二十题  玄学常识题问题求解  全错……全错……全错……

ShimaKZ的博客 861

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台实现的全桥LLC谐振变换器闭环仿真模型,该模型采用变频控制(PFM)与移相控制相结合的混合控制策略,针对隔离型全桥LLC拓扑结构进行优化设计。通过系统建模、关键参数设计及控制环路构建,重点解决了变换器在宽负载范围内效率低与动态响应差的问题。混合控制方式有效提升了软开关性能,降低了开关损耗,并增强了系统的稳定性和调节能力。资源包提供了完整的仿真模型、设计报告与计算书,有助于用户深入理解并复现实验结果,适用于电力电子变换器的科研与教学实践。; 适合人群:电力电子、电气工程及相关专业的高校学生、研究人员,以及从事开关电源、新能源变换器开发的工程技术人员。; 使用场景及目标:① 学习和掌握LLC谐振变换器的工作原理及变频+移相混合控制策略的设计方法;② 开展电力电子系统的建模仿真研究,支持课程设计、毕业设计或科研项目开发;③ 为实际工程中高效率DC-DC变换器的设计提供技术参考与仿真验证手段。; 阅读建议:建议读者结合提供的仿真模型与设计文档逐步操作,注重控制逻辑与参数整定的理解,可通过调整输入电压、负载条件等方式测试系统的动态响应特性,从而深化对闭环控制系统设计原理的掌握。

NOIP2014 Day2 模拟赛赛后总结&题解

考试时的心态:  还能有什么心态,考炸了嘛。题解第一题:无线电通讯:  水题,直接模拟,就不多说了。第二题:图论水题:  其实也挺水的,只要倒着来广搜一遍,把能到达的边标记一下就可以了。接下来从起点出发BFS一遍就可以了,但是我考试的时候没有想那么多,忘了判重了,直接进入死循,由于是有向图,导致测试数据中没有出现环,让我非常自信地认为自己对了。结果……TLE10分。该拿的分没拿过来,浑身难受。其实只

ShimaKZ的博客 668

高校技术转移办公室人员如何提升科技成果推介的转化率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Screenshot_20261111_233212.jpg

Screenshot_20261111_233212.jpg

NOIP初赛模拟赛总结

错误题号:选择题:1,2,10,11,12,19问题求解:全对程序阅读:2程序完善:2.1,2.4题解:选择题:  第一题:主要是集合差的运算我不会,差:以属于A而不属于B的元素为元素的集合称为A与B的差(集) 第二题:这题我算都没算,主要就是容斥原理与排列组合,先算出至少有一个abc的情况,即“abc”和2个a,4个b,1个c的排列,8!/(2!*4!),在保证有一个”abc”时,可能还会有另

ShimaKZ的博客 542

跟着团子学SAP EPPM:项目管理常见的集成场景(PPM\PS\MS Project)

在SAP的EPPM解决方案中,针对企业战略级别的投资组合管理首先是定义合适的投资组合的层级结构,在投资组合下可以通过不同维度去定义投资篮(Portofolio Bucket)进行层层拆分,在最下层级的投资篮下可以分配明细的投资项(Portofolio Item),投资项可以是独立的一个一个具体执行的项目,也可以是单纯的一次服务等等。 今天主要聚焦在投资项的维度展开讲一下在SAP中投资项常见的几种集成模式: 集成场景1:使用PPM中的Project Management进行项目管理 第一个场景是在创建投资项

Lucas1211的博客 4141

NOIP2014 DAY1 模拟赛赛后总结

T1 生活大爆炸版石头剪刀布  大水题,不解释,打表强过代码#include<iostream> #include<cstdio> #define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i) #define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i) #define M

ShimaKZ的博客 511

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 979

20171006离线赛总结

考试时的思维cstdio 文件名 输出调试 内存 第一题 递推 拿完80分就跑 第二题 先按背包打 拿完60分就跑 看一看能不能排序贪心 每一次选择性价比最高的,然后当v==m-1并且花费为2时特殊判,有两种方案,要么从后面选一个花费 为1的,要么弹出一个花费为1的,把当前的插入进去,答案就在这两者中,正确性显然。 第三题 三十分还是比较好拿的,爆搜 其次,可以枚举起点直接

ShimaKZ的博客 433

IBM Storwize V3700存储维护实战:硬盘更换、电源模块热插拔与带外管理IP配置

在企业IT基础设施中,存储阵列是数据持久化的核心组件,其稳定运行直接关系到业务连续性。存储阵列通常采用RAID技术实现数据冗余,并通过热插拔、冗余电源等设计保障高可用性。带外管理则提供了独立于业务网络的硬件级监控与管理通道,是运维的关键手段。本次实战以一台IBM Storwize V3700存储阵列为例,详细记录了在业务低峰期,依据严谨的操作流程,对出现SMART预警的硬盘进行在线更换,并对有异响的冗余电源模块实施热插拔更换。针对管理界面强制要求设置VIP才能配置带外管理地址的限制,文章提供了通过SSH命令

weixin_29172963的博客 303

20171010离线赛总结

题解:第一题:字符连通块  这道题还是比较好想的,首先把每个连通块标记出来,并用第一次扫到的点标记为这个连通块的父节点,接下来要做的就是把一个‘*’周围的连通块连通起来。不过要注意一点,在连通标记的时候不要用memset,memset的复杂度是m/8(m是数组大小),会很慢,直接循环标记就好了。#include<iostream> #include<cstdio> #include<cstring>

ShimaKZ的博客 409

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 825

从零开始的BW(五) 外部系统供数之OData测试

5、激活添加的服务,如提示下图中的激活失败,根据生成URI在事务代码SICF目录中找到对应的服务,设置超时时间,设置完之后重新激活即可,详情可参考SAP note 1986626。如果刚才设置BY Odata的query在这没有显示,SE38执行程序EQ_RS_AUTOSETUP,选中需要生成服务的query,生成服务后再去添加服务。测试get方法,URI中默认的参数是?4、事务代码/IWFND/MAINT_SERVICE中添加服务,如果提示用户不再登陆,在事务代码前加上/O或者/N即可。

m0_61386064的博客 1109

离线赛20171008总结

考试时的状态  这次考试总的来说考得很糟,前面三个小时基本都在梦游,不知道自己在该干什么。看了半天题目,连最基本的排序都没想起来,用计数算了半天,却被重复运算搞懵了,这些特殊情况都不该出现的。基本上分数都是最后半小时拿来的,自然也不会考得很高了。题解第一题:  这道题关键考察的就是排列组合,这里有一个很重要的结论,那就是c[i][j]=c[i-1][j]+c[i-1][j-1]。这个结论的推导也是比

ShimaKZ的博客 391

STM32与威纶通触摸屏RS485通信实战:Modbus RTU协议与避坑指南

在工业自动化与嵌入式系统开发中,串行通信是实现设备间数据交换的基础技术。RS485总线凭借其差分信号传输、抗干扰能力强、支持多点通信及长距离传输等特性,成为工业现场广泛应用的物理层标准。其核心原理是利用一对双绞线进行平衡传输,有效抑制共模噪声。在协议层,Modbus RTU作为开放、简洁的主从式应用层协议,定义了统一的数据模型(如线圈、寄存器)和功能码,极大简化了不同厂商设备间的互操作性。结合STM32微控制器的UART外设与威纶通(Weinview)人机界面(HMI),可以构建稳定可靠的监控与控制系统。本

weixin_33925615的博客 334

20171009离线赛总结

考试时的思路: 第一题 直接枚举 正着循环,倒着循环,求出每个点对应的L和R 第二题 20:32 2017/10/9 看了半天,把所有可能的区间预处理出来,dfs。 第三题 30分的话,用二进制枚举,看一条边取还是不取。 可以先把链的写了,输入的u到v的路径就变成了一个区间,这样的话,问题就简化为区间调度问题。 按照终点排序,然后贪心。题解:第一题:双击  这道题还是相当水的,只

ShimaKZ的博客 326

第1集:面试官视角:AIOps 核心能力模型与面试项目全局搭建【免费试读】

本文介绍了一门面向AIOps工程师的面试实战课程,针对当前运维领域薪资差距明显的痛点,帮助学员系统掌握企业级AIOps平台开发能力。课程承诺提供可直接用于面试和生产环境的代码实现,从零构建模块化AIOps平台。第一集重点讲解了面试官视角下的核心能力模型,并指导学员搭建项目基础环境,包括Python虚拟环境配置、本地大模型部署(Ollama)以及智能巡检Agent的代码实现。课程强调实战导向,通过40集系统讲解,帮助学员实现薪资40-60万的职业跃升。

qq_2937655951的博客 616

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 20171006离线赛总结
下一篇: 离线赛20171008总结
Shima_KaZe
博客等级 码龄9年 16粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值