10.16考试总结

news/2024/10/18 16:48:03

T1 最小生成树

题面:给你一个无向带权连通图,每条边是黑色或白色。让你求一棵恰好有 \(need\) 条白色边的
权值和最小的生成树。题目保证有解。
题解:
最小生成树,自然而然想到kruskal算法,但我们要让白点恰好有 \(need\) 条,在白点多的时候,要多选黑点,在白点少的时候,要多选白点,所以我们可以根据白点选择情况对黑点的权值进行调整,在白点多的时候,减少黑点权值,在白点少的时候,增加黑点权值,然后发现随着黑点权值增加量的增加,白点数量单调递增,所以考虑二分。

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,k,fa[N],ans,need,sum,cnt;
struct node
{int u,v,w,cl;
}bi[N];
int find(int x)
{if(x==fa[x])return x;else return fa[x]=find(fa[x]);
}
bool cmp(node x,node y)
{if(x.w!=y.w)return x.w<y.w;else return x.cl<y.cl;
}
void kus()
{sum=0,cnt=0,need=0;for(int i=1;i<=n;i++)fa[i]=i;	for(int i=1;i<=m;i++){int f1=find(bi[i].u),f2=find(bi[i].v);if(f1==f2)continue;cnt++;if(bi[cnt].cl==0)need++;fa[f2]=f1;sum+=bi[i].w;if(cnt==n-1)return;}
}
int main()
{freopen("e.in","r",stdin);freopen("e.out","w",stdout);	ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);cin>>n>>m>>k;for(int i=1;i<=m;i++)cin>>bi[i].u>>bi[i].v>>bi[i].w>>bi[i].cl;int l=-1005,r=1005;while(l<r){int mid=l+(r-l)/2;for(int i=1;i<=m;i++)if(bi[i].cl==0)bi[i].w+=mid;sort(bi+1,bi+m+1,cmp);kus();for(int i=1;i<=m;i++)if(bi[i].cl==0)bi[i].w-=mid;if(need>=k)ans=sum-mid*k,l=mid+1;else r=mid;}cout<<ans<<endl;return 0;
}

反思:做过这道题,甚至不止一次,但考场上没做出来,还是自己学的不太好。

T2 矩阵游戏

反向思考,一个正对角线上都有黑点,每个黑点都来自原图的某一行某一列,因为交换操作,同一列同一行的点始终在同一列同一行。所以原图的这一行和这一列绑定起来贡献一个点在对角线上,所以对每个黑点行列连边。跑二分匹配图,有完美匹配就有解,否则无解。

#include <bits/stdc++.h>
using namespace std;
const int M=4e4+10,N=4e4+10;
int t,n,tot,nxt[M],go[M],hd[N],girl[N],ans;
bool vis[N];
void add(int x,int y)
{nxt[++tot]=hd[x];go[tot]=y;hd[x]=tot;return ;
}
bool find(int x)
{for(int i=hd[x];i;i=nxt[i]){int v=go[i];if(vis[v])continue;vis[v]=1;if(!girl[v]||find(girl[v])){girl[v]=x;return 1;}}	return 0;
} 
int main()
{freopen("f.in","r",stdin);freopen("f.out","w",stdout);	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t--){tot=0,ans=0;memset(hd,0,sizeof(hd)); memset(girl,0,sizeof(girl));cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){int x;cin>>x;if(x==1)add(i+n,j);}for(int i=1+n;i<=2*n;i++){ans+=find(i);for(int i=1;i<=n;i++)vis[i]=0;}if(ans==n)cout<<"Yes"<<'\n';else cout<<"No"<<'\n';} return 0;
} 

反思:想到了做法,同时写出了程序,但因为一开始遇到不符合条件就输出No,所以有地方没清零,挂了20分,以后每次输出清零后的数组检查。

T3 贪吃蛇

爆搜加一种alpha-beta剪枝,直接做。

#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 25
#define CT 51
#define inf 0x3f3f3f3f
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
int grid[maxn][maxn],n,m;
int dfs(int rnd,int player,int alpha,int beta,int fx,int fy,int px,int py)
{int flag=0,ans;if(player==1)ans=beta;else ans=alpha;for(int i=0;i<4;i++){int x=fx+dx[i],y=fy+dy[i];if(x&&y&&x<=n&&y<=m&&!grid[x][y]){flag=1;int cur;grid[x][y]=player;if(player==1)cur=dfs(rnd+1,2,alpha,ans,px,py,x,y);else cur=dfs(rnd+1,1,ans,beta,px,py,x,y);grid[x][y]=0;if(player==2&&cur<=beta)return beta;if(player==1&&cur>=alpha)return alpha;if(player==1)ans=max(ans,cur);else ans=min(ans,cur);}}if(!flag){if(player==1)return -CT+rnd;else return CT-rnd;//提示:如果自己能赢,一定会尽量快地赢;如果自己会输,一定会死得尽量晚.}return ans; 
}
int main()
{freopen("h.in","r",stdin);freopen("h.out","w",stdout);scanf("%d%d",&n,&m);int x1,y1,x2,y2;for(int i=1; i<=n; i++)for(int j=1; j<=m; j++){scanf("%d",&grid[i][j]);if(grid[i][j]==1) x1=i,y1=j;if(grid[i][j]==2) x2=i,y2=j;}int ans=dfs(1,1,inf,-inf,x1,y1,x2,y2); if(ans<0) printf("2 %d\n",ans+CT);else  printf("1 %d\n",CT-ans);return 0;
}

反思:至少应该把爆搜写出来。

T4 信息拦截

挖坑。

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

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

相关文章

Denoising Diffusion Implicit Models(去噪隐式模型)

DDPM有一个很麻烦的问题,就是需要迭代很多步,十分耗时。有人提出了一些方法,比如one-step dm等等。较著名、也比较早的是DDIM。 原文:https://arxiv.org/pdf/2010.02502 参考博文:https://zhuanlan.zhihu.com/p/666552214?utm_id=0 DDIM假设 DM假设 ddim给出了一个新的扩…

20222408 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 1.1本周学习内容 本次实验中,学习的重点是后门的实现与启动方式,学习内容还有后门的定义、原理以及可能影响,netcat、socat、MSF meterpreter软件的应用。 1.2实验内容简述使用netcat获取主机操作Shell,利用cron启动一项任务 使用socat获取主机操作Shell, 利用创…

京东APP百亿级商品与车关系数据检索实践

作者:京东零售 张强导读 本文主要讲解了京东百亿级商品车型适配数据存储结构设计以及怎样实现适配接口的高性能查询。通过京东百亿级数据缓存架构设计实践案例,简单剖析了jimdb的位图(bitmap)函数和lua脚本应用在高性能场景。希望通过本文,读者可以对缓存的内部结构知识有一…

专题(二十) cut

一、作用与介绍cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符、字段写至标准输出。 二、用法选项 用法说明 举例说明 备注-b 按字节截取 who | cut -b 3 输出每行的第三个字节-c 按字符截取,常用于中文 cut -c 2 输出每行的第二个中文字符-d 指定以什么为…

【DevExpress】(多行粘贴、块粘贴)

复制是GridControl自带的属性,主要解决的是多个单元格复制的问题,这里涉及到两个参数。 主要是粘贴的 先定义两个全局变量,在单元格点击事件的时候获取单元格的行号和列号1 //获取当前选中单元格所在的列序号2 int curntindex;3 //获取获取当前选中单元格所在的行…

Jenkins+Coverage的代码覆盖率集成实践

Jenkins+Coverage的代码覆盖率集成实践 一、工具介绍Jenkins: Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。 Coverage: Coverage是一个Python代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估…

C++顺序结构(3)、数据类型_____教学

一、设置域宽setw() 输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽。 使用setw()前,必须包含头文件iomanip,即#include<iomanip> 头文件iomanip,用来声明一些“流操作符”,需要一定格式输入输出时,就需要用到它,比较常用的有设置域宽、设置左右对齐、设置…

OpenCity: Open Spatio-Temporal Foundation Models for Traffic Prediction

1. 数据准备 在这个数据处理过程中,以数据集 PEMS07M 为例,整个数据抽取和划分过程如下:初始数据维度:原始训练数据 data_train 的维度为 (12672, 228, 3)。其中:12672 表示时间步数,代表不同的时间点采样的数据。 228 表示空间节点数(例如不同的交通站点)。 3 表示每个…