2019ICPC南京站

A

A Hard Problem

题意:给定一个正整数 n ,你需要找出最小整数 k,满足:从{1,2,⋯,n}中任意选择长度为k的子集,存在两个不同的整数 u,v∈T, 且 u 是 v 的因数。

思路:打表找规律 k = \left \lceil n/2 \right \rceil + 1

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e8+10;
const int inf=0x3f3f3f3f;using namespace std;void solve()
{int n;cin>>n;cout<<(n+3)/2<<'\n';
}
signed main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);ios;// get();// cout<<cnt<<'\n';int _t=1;cin>>_t;while(_t--) solve();system("pause");return 0;
}

C

Digital Path

题意:给定一个n*m的数字矩阵,从入度为0的点出发,每次操作只能向上下左右且增值为1的格子移动,终点为出度为0的点。求长度大于等于4的路径个数。

思路:先算出每个点的出度入度,从入度为0的开始bfs,更新方案数。

f[i][j][x]表示到达点(i, j)路径长度为x的方案数,特别的f[i][j][4]表示到达点(i, j)路径长度大于等于4的方案数。更新方式如下:

f[nx][ny][2] += f[x][y][1]

f[nx][ny][3] += f[x][y][2]

f[nx][ny][4] += f[x][y][3] + f[x][y][4]

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>typedef long long ll;
const int N=1010;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
using namespace std;
int n,m;
int a[N][N];
int in[N][N],out[N][N];
int f[N][N][5];
int dir[4][2]={1,0,-1,0,0,1,0,-1};
void bfs()
{queue<pair<int,int>>q;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(in[i][j]==0) {q.push({i,j});f[i][j][1]=1;}while(q.size()){int x=q.front().first,y=q.front().second;q.pop();for(int k=0;k<4;k++){int nx=x+dir[k][0],ny=y+dir[k][1];if(nx<1||nx>n||ny<1||ny>m) continue;if(a[nx][ny]==a[x][y]+1){f[nx][ny][2]=(f[nx][ny][2]%mod+f[x][y][1])%mod;f[nx][ny][3]=(f[nx][ny][3]%mod+f[x][y][2])%mod;f[nx][ny][4]=((f[nx][ny][4]%mod+f[x][y][3]%mod)%mod+f[x][y][4]%mod)%mod;in[nx][ny]--; if(in[nx][ny]==0) q.push({nx,ny});}}}
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<4;k++){int nx=i+dir[k][0],ny=j+dir[k][1];if(nx<1||nx>n||ny<1||ny>m) continue;if(a[nx][ny]==a[i][j]+1) out[i][j]++;else if(a[nx][ny]==a[i][j]-1) in[i][j]++;}bfs();int ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(out[i][j]==0) ans=(ans%mod+f[i][j][4])%mod;cout<<ans<<'\n';
}
signed main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);ios;int _t=1;//cin>>_t;while(_t--) solve();system("pause");return 0;
}

H

Prince and Princess

题意:

有n个房间,每个房间有一个人,他们知道任一个人在哪个房间,其中公主在某一房间.你可以问任一房间的人下列三个问题之一:①你是谁;②某个房间里的人是谁;③公主在哪个房间.

这n个人可分为三类,说真话、说假话、可能说真话也可能说假话,分别有a , b , c( 0 < a , b , c < 2e5 )人.至少问几次才能确定公主在哪个房间.若无法确定,输出"NO";若可以确定,输出"YES",下一行输出最小询问次数.

思路:考虑最坏情况,开始问的(b+c)个人都说假话,都回答错误答案A,再接着问(b+c)个人都说真话,都回答答案B,此时两个答案选择人数相同;再多问一个人,就可以区分出哪个是真话。所以至少需要问a+b+a+b+1=2(a+b)+1次,当总人数a+b+c >= 2(b+c)+1时,即a>=b+c+1时,输出YES。注意需要特判a=1 b=0 c=0时,只有公主一人时不需要询问。

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;using namespace std;
int a,b,c;
void solve()
{cin>>a>>b>>c;if(b+c>=a) cout<<"NO\n";else {cout<<"YES\n";if(a==1&&b==0&&c==0) cout<<0<<'\n';else if(b==0&&c==0) cout<<1<<'\n';else cout<<2*(b+c)+1<<'\n';}
}
signed main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);ios;int _t=1;//cin>>_t;while(_t--) solve();system("pause");return 0;
}

K

Triangle

题意:给定三角形三个顶点的坐标,给定点p,在三角形上找一点q的坐标,使得pq可以平分三角形面积。若p点不在三角形上时输出-1.

思路:分类讨论,讨论p在哪条边上,更靠近边的哪个顶点,在对应的边上二分求点q

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;
const double eps=1e-7;
using namespace std;
inline double sqr(double x){return x*x;}
int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%lf%lf",&x,&y);}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//返回两点的距离double distance(Point p){return hypot(x-p.x,y-p.y);}Point operator +(const Point &b)const{return Point(x+b.x,y+b.y);}Point operator *(const double &k)const{return Point(x*k,y*k);}};struct Line{Point s,e;Line(){}Line(Point _s,Point _e){s = _s;e = _e;}// 点在线段上的判断bool pointonseg(Point p){return sgn((p-s)^(e-s)) == 0 && sgn((p-s)*(p-e)) <= 0;}};Point mid_(Point a, Point b)
{return (a+b)*0.5;
}double area(Point a, Point b, Point c)
{return fabs((b - a) ^ (c - a) * 0.5);
}void solve()
{Point a,b,c,p;Line ab,ac,bc;a.input();b.input();c.input();p.input();ab=Line(a,b);ac=Line(a,c);bc=Line(b,c);if(!ab.pointonseg(p)&&!ac.pointonseg(p)&&!bc.pointonseg(p)){printf("-1\n");}else{double s=area(a,b,c)/2;if(ab.pointonseg(p)){double dispa=p.distance(a);double dispb=p.distance(b);if(dispa<dispb){Point l=b,r=c;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(mid,p,b)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}else{Point l=a,r=c;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(mid,p,a)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}}else if(ac.pointonseg(p)){double dispa=p.distance(a);double dispc=p.distance(c);if(dispa<dispc){Point l=c,r=b;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(p,mid,c)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}else{Point l=a,r=b;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(p,mid,a)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}}else{double dispb=p.distance(b);double dispc=p.distance(c);if(dispb<dispc){Point l=c,r=a;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(p,mid,c)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}else{Point l=b,r=a;Point mid;int x=50;while(x--){mid=mid_(l,r);int ret=sgn(area(p,mid,b)-s);if(ret>0) r=mid;else if(ret<0) l=mid;else break;}printf("%.10f %.10f\n",mid.x,mid.y);}}}
}
signed main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);ios;int _t=1;// cin>>_t;scanf("%d",&_t);while(_t--) solve();system("pause");return 0;
}

J

Spy

题意:给定n个敌人的力量值a[i],及击杀敌人获得的荣誉值p[i].给定你的第一队的力量值b[i],第二队的力量值c[i].需要将b[i]与c[j]一一配对后组成n只队伍d[],新的力量值为两人之和,d[]再与a[]随机战斗,每只队伍只能战斗一次,共n!种情况。若d[i]>a[i]我方获得荣誉值p[i].求可获得的荣誉的最大期望乘n的值,数据保证最大期望乘n后是整数

思路:把b[]和c[]当作二分图,边的权值为这对组合可以获得的荣誉值之和。然后进行KM算法,找到最大权值匹配即为答案。

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=410;
const int inf=0x3f3f3f3f;
const ll infll=1e15+7;
using namespace std;
int n;
ll a[N],p[N],b[N],c[N];
ll w[N][N];
ll la[N], lb[N], upd[N]; // 左、右部点的顶标
bool va[N], vb[N]; // 访问标记:是否在交错树中
ll match[N]; // 右部点匹配了哪一个左部点
ll last[N]; // 右部点在交错树中的上一个右部点,用于倒推得到交错路bool dfs(ll x, ll fa) 
{va[x] = 1;for(int y = 1; y <= n; y++){if(!vb[y]){if(la[x] + lb[y] == w[x][y]) { vb[y] = 1; last[y] = fa;if(!match[y] || dfs(match[y], y)) {match[y] = x;return true;}}else if(upd[y] > la[x] + lb[y] - w[x][y]) {upd[y] = la[x] + lb[y] - w[x][y];last[y] = fa;}}}return false;
}ll KM() 
{for(int i = 1; i <= n; i++) {la[i] = -infll;lb[i] = 0;for(int j = 1; j <= n; j++) la[i] = max(la[i], w[i][j]);}for(int i = 1; i <= n; i++) {memset(va, 0, sizeof(va));memset(vb, 0, sizeof(vb));for(int j = 1; j <= n; j++) upd[j] = infll;// 从右部点st匹配的左部点match[st]开始dfs,一开始假设有一条0-i的匹配int st = 0; match[0] = i;while(match[st]) 	// 当到达一个非匹配点st时停止{ ll delta = infll;if(dfs(match[st], st)) break;for(int j = 1; j <= n; j++)if(!vb[j] && delta > upd[j]) {delta = upd[j];st = j; 		// 下一次直接从最小边开始DFS}for(int j = 1; j <= n; j++)  // 修改顶标{if(va[j]) la[j] -= delta;if(vb[j]) lb[j] += delta; else upd[j] -= delta;}vb[st] = true;}while(st)	// 倒推更新增广路 { match[st] = match[last[st]];st = last[st];}}ll ans = 0;for(int i = 1; i <= n; i++) if(match[i]) ans += w[match[i]][i];return ans;
}void solve()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>p[i];for(int i=1;i<=n;i++) cin>>b[i];for(int i=1;i<=n;i++) cin>>c[i];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){ll sum=0;for(int k=1;k<=n;k++)if(b[i]+c[j]>a[k]) sum+=p[k];w[i][j]=sum;}cout<<KM()<<'\n';}
signed main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);ios;int _t=1;//cin>>_t;while(_t--) solve();system("pause");return 0;
}

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

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

相关文章

JSP:Tag文件的使用

需求&#xff1a;多个JSP页面可能需要使用一些相同的信息 例如:导航栏、标题等。 目标&#xff1a;提高这些相同信息的代码的复用性。 方法&#xff1a;将这些相同的元素形成一种特殊的文件&#xff0c;以便所有页面都可以使用&#xff0c;即&#xff1a;Tag文件 1、Tag对…

MySQL数据库入门到大牛_基础_10_创建和管理表(创建和管理数据库;创建表;修改表;重命名表;删除表;清空表,内容扩展)

前面我们完成了查询结构的介绍&#xff0c;本章介绍DDL和DCL中的COMMIT和ROLL BACK。 文章目录 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建…

猫罐头哪个牌子好吃?精选5款好评率高的猫罐头推荐!

很多新手养猫的姐妹们都会为选罐头感到焦虑&#xff01;因为每种猫罐头都有优缺点&#xff0c;每只猫咪的胃口也都不同&#xff0c;所以只有综合考虑选择适合自家猫咪的猫罐头的才是最好的。所以姐妹们在选罐头之前可以先做好功课&#xff0c;了解一下怎么选好的猫罐头。 作为开…

Jmeter监听器

Jmeter监听器 一、监听器介绍二、监听器的类型三、监听器详解3.1 察看结果树3.2 Summary Report3.3 聚合报告3.4 后端监听器3.5 Aggregate Graph3.6 Comparison Assertion Visualizer&#xff08;比较断言可视化器&#xff09;3.7 JSR223 Listener3.8 Response Time Graph3.9 S…

欧科云链研究院:从香港SFC最新文件看链上交易合规必备之选

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 近日&#xff0c;香港证监会在其官网发布“致持牌法团、获证监会发牌的虚拟资产服务提供者及有联系实体的通函 - 打击洗钱&#xff0f;恐怖分子资金筹集经更新的《打击洗钱&#xff0f;恐怖分子资金筹集的自我评估查…

CICD 持续集成与持续交付(2)

目录 gitlab 部署 jenkins 部署 配置 实时触发 自动化构建docker镜像 通过ssh插件交付任务 添加jenkins节点 RBAC pipeline jenkins结合ansible参数化构建 安装ansible 新建gitlab项目 jenkins新建项目playbook gitlab 部署 虚拟机最小需求&#xff1a;4G内存 4核cpu 下载&…

【智能优化算法】从蚁群到动物园

目录 引言蚁群优化算法&#xff08;ACO&#xff09;ACO 机理ACO 模型描述ACO 移动策略 粒子群优化算法&#xff08;PSO&#xff09;PSO 机理PSO 模型描述 萤火虫群优化算法&#xff08;GSO&#xff09;GSO 机理GSO 模型描述 群智能优化算法 引言 21世纪&#xff0c;人类社会已经…

ElementUI用el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素&#xff08;Elementui&#xff09;四、代码部分 一、效果图 二、使用场景 &#x1f6c0;el-form 表单内嵌套el-table表格 &#x1f6c0;el-table 表格内又嵌套el-table表格 三、所用组件元素&#xff08;Elementui&#xff…

Kubeadm部署Kubernetes Containerd集群

文章目录 概述一、硬件系统二、基础配置设置主机名配置主机名与IP地址解析关闭防火墙与selinux时间同步(ntp)升级系统内核配置内核转发及网桥过滤*安装ipset及ipvsadm关闭SWAP分区 三、Containerd准备Containerd获取下载解压Containerd配置文件生成并修改Containerd启动及开机自…

5年经验之谈 —— 性能测试如何定位分析性能瓶颈?

你好&#xff0c;我是小牛&#xff0c;目前在一家准一线互联网大厂做测试开发工程师。 对于一般公司普通测试工程师来说&#xff0c;可能性能测试做的并不是很复杂&#xff0c;可能只是编写下脚本&#xff0c;做个压测&#xff0c;然后输出报告结果&#xff0c;瓶颈分析和调优…

【Hello Go】Go语言复合类型

复合类型 分类指针基本操作new函数指针作为函数的参数 数组概述操作数据数组初始化数组比较在函数之间传递数组 slice概述切片的创建和初始化切片操作切片和底层数组关系内建函数appendcopy 切片作为函数传参 map概述创建和初始化常用操作赋值遍历 删除map作函数参数 结构体结构…

Python (十三) 输出

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

基于Python+TensorFlow+Django的交通标志识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展&#xff0c;交通标志的自动识别变得愈发重要。本项目旨在利用Python编…

利用SVD对图像进行压缩

利用SVD对图像进行压缩 使用SVD能够对数据进行降维&#xff0c;对图像进行SVD&#xff0c;降维之后然后重构数据&#xff0c;还原后的图像就是压缩后的图像。 SVD SVD进行图像压缩所依据的数学原理就是矩阵的近似表示&#xff1a; A m n ≈ U m k ∑ k k V k n T A_{m\…

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于晶体结构优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

vite构建项目不能使用require解决方案

在utils文件夹下创建一个getImgUrl.ts文件 /** vite的特殊性, 需要处理图片 */ export const require (imgPath: string) > {try {const handlePath imgPath.replace(, ..)console.log(handlePath::, imgPath)return new URL(handlePath, import.meta.url).href} catch (…

如何入驻抖音本地生活服务商,附上便捷流程!

抖音作为一款短视频社交媒体应用&#xff0c;已经成为全球范围内数以亿计的用户的首选。而在普及的同时&#xff0c;短视频领域也在不断拓展自身的业务领域&#xff0c;其中之一就是本地生活服务。继抖音本地生活服务之后支付宝、视频号也相继开展了本地生活服务&#xff0c;用…

Linux(5):Linux 磁盘与文件管理系统

认识 Linux 文件系统 磁盘的物理组成&#xff1a; 1.圆形的磁盘盘(主要记录数据的部分); 2.机械手臂&#xff0c;与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)&#xff1b; 3.主轴马达&#xff0c;可以转动磁盘盘&#xff0c;让机械手臂的读取头在磁盘盘上读写数据。 4…

python接口自动化-参数关联

前言 我们用自动化发帖之后&#xff0c;要想接着对这篇帖子操作&#xff0c;那就需要用参数关联了&#xff0c;发帖之后会有一个帖子的id&#xff0c;获取到这个id&#xff0c;继续操作传这个帖子id就可以了 &#xff08;博客园的登录机制已经变了&#xff0c;不能用账号和密…