1.27 模拟赛

news/2024/11/25 15:45:23/

1.队列

编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线
中水平线和垂直线交点的数目。

这道题很水,甚至可以不用搜索,直接循环两次就行

#include<bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-48 ; ch=getchar();}return x*f;
}
int a[20][20];
int ans;
int main(){for(register int i(1) ; i<=10 ; i=-~i){for(register int j(1) ; j<=10 ; j=-~j){cin >> a[i][j];}}for(register int i(0) ; i<=11 ; i=-~i) a[i][0] = a[0][i] = a[11][i] = a[i][11] = 2;for(register int i(1) ; i<=10 ; i=-~i){for(register int j(1) ; j<=10 ; j=-~j){if(a[i][j]!=1 && (a[i][j-1] == 2 || a[i-1][j] == 2)) a[i][j] = 2;}}for(register int i(10) ; i>=1 ; i--){for(register int j(10) ; j>=1 ; j--){if(a[i][j] != 1 && (a[i+1][j] == 2 || a[i][j+1]== 2)) a[i][j] = 2;}}for(register int i(1) ; i<=10 ; i=-~i){for(register int j(1) ; j<=10 ; j=-~j){if(a[i][j]== 0) ans++;}}printf("%d",ans);    return 0;
}

2.奇怪的电梯

大楼的每一层楼都可以停电梯,而且第 i 层楼(1<=i<=N)上有一个数字 Ki(0<=Ki<=N)。
电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果
不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5 代表了 Ki(K1=3,K2=3,......),从一
楼开始。在一楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有-2 楼。那么,
从 A 楼到 B 楼至少要按几次按钮呢?

一道广搜的经典题,存两个状态,上和下,接着搜就行

#include<bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-48 ; ch=getchar();}return x*f;
}
int n,a,b;
int e[10010],vis[10010];
queue<int>f;
queue<int>s;
int main(){	n=read();a=read();b=read();for(int i=1 ; i<=n ; i++) e[i] = read();memset(vis,0,sizeof(vis));f.push(a);s.push(0);vis[a] = 1;while(!f.empty()){if(f.front() == b){cout << s.front();return 0;}int x = f.front() + e[f.front()];if(x<=n && vis[x] == 0){vis[x] = 1;f.push(x);s.push(s.front() + 1);}x = f.front() - e[f.front()];if(x>=1 && vis[x] == 0){vis[x] = 1;f.push(x);s.push(s.front() + 1);}f.pop();s.pop();}cout << -1;return 0;
}

3.产生数

给出一个整数 n(n<=2000)和 k 个变换规则(k≤15)。规则:
① 1 个数字可以变换成另 1 个数字;
② 规则中,右边的数字不能为零。
例如:n=234,k=2 规则为
2 → 5
3 → 6
上面的整数 234 经过变换后可能产生出的整数为(包括原数)234,534,264,564 共 4
种不同的产生数。
求经过任意次的变换(0 次或多次),能产生出多少个不同的整数。仅要求输出不同整
数个数。

这道题比洛谷上的简单,数据范围调小了, 考虑这个数的每一位,如果能变换的话答案加一,记录下来,一直往下找,知道队列为空

#include<bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-48 ; ch=getchar();}return x*f;
}
int n,k;
queue<int>q;
int cnt;
int x[20010],y[20010];
int vis[20010];
void bfs(){q.push(n);vis[n] = 1;while(!q.empty()){int a = q.front();int z = a,sum = 1;q.pop();while(a>0){int b = a%10;a /= 10;for(register int i(1) ; i<=k ; i=-~i){if(b== x[i]){ int jilu = z - x[i]*sum + y[i]*sum;if(!vis[jilu]){vis[jilu] = 1;q.push(jilu);cnt++;}}}sum *= 10;}}
}
int main(){scanf("%d%d",&n,&k);for(register int i(1) ; i<=k ; i=-~i)scanf("%d%d",&x[i],&y[i]);bfs();printf("%d",cnt+1);return 0;
}

4.家庭问题

有 n 个人,编号为 1,2,......n,另外还知道存在 K 个关系。一个关系的表达为二元组(α,
β)形式,表示α,β为同一家庭的成员。
当 n,k 和 k 个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?
例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)
此时,6 个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家庭,{6}单独为
一个家庭,第一个家庭的人数为最多。

第一眼看上去肯定是一个并查集的题,于是我先拿并查集交了一遍,AC了

#include<bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-48 ; ch=getchar();}return x*f;
}
int n,k;
int f[110];
int ans[110];
int cnt;
int maxn = -1e9;
int find(int x){if(f[x] == x) return x;return f[x] = find(f[x]);
}
int main(){cin >> n >> k;for(register int i(1) ; i<=n ; i=-~i) f[i] = i;for(register int i(1) ; i<=k ; i=-~i){int x,y;cin >> x >> y;f[find(x)] = find(y);}for(register int i(1) ; i<=n ; i=-~i){if(ans[f[find(i)]] == 0) ans[f[find(i)]]++,cnt++;else ans[f[find(i)]]++;}for(register int i(1) ; i<=n ; i=-~i) maxn = max(maxn,ans[i]);printf("%d %d",cnt,maxn);return 0;
}

但比赛的题目是队列,这么做。。(毕竟不太好),所以我就用队列广搜做了一遍

首先是存,用链式前向星存,注意是无向边,然后一个个枚举该点能走到的点,如果这个点未被走到,答案加一,并且用maxn记录家庭的最大数

#include<bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-48 ; ch=getchar();}return x*f;
}
int n,k;
int cnt;
int ans1,ans2,maxn;
struct egde{int to,net;
}e[100010];
int head[100010];
bool vis[100010];
void add(int u,int v){e[++cnt].to = v;e[cnt].net = head[u];head[u] = cnt;
}
void bfs(int x){if(vis[x]) return;queue<int>q;vis[x] = 1;ans1++;ans2 = 1;q.push(x);while(!q.empty()){int k = q.front();q.pop();for(register int i=head[k] ; i ; i=e[i].net){if(!vis[e[i].to]){vis[e[i].to] = 1;q.push(e[i].to);ans2++;}}}maxn = max(maxn,ans2);
}
int main(){n=read();k=read();for(register int i(1) ; i<=k ; i=-~i){int x,y;x=read();y=read();add(x,y);add(y,x);}for(register int i(1) ; i<=n ; i=-~i) bfs(i);printf("%d %d",ans1,maxn);return 0;
}


http://www.ppmy.cn/news/378772.html

相关文章

第十六届全国大学智能汽车竞赛竞速比赛规则

➤第十六届竞赛竞速比赛规则导读 参加过往届比赛的队员可以通过下面内容了解第十六届竞赛规则主要变化。如果第一次参加比赛&#xff0c;建议对于本文进行全文阅读。 竞速比赛共分为为八个组别。详细情况参加文档第一节中的介绍&#xff0c;比赛组别是按照比赛任务来进行划分。…

利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)

ROS学习【18】-----利用Gazebo搭建赛道&#xff0c;控制小车完成比赛目录 一、 ROS仿真功能包下载编译1、racecar功能包下载2、安装该功能包运行需要的控件3、racecar功能包编译4、测试是否编译成功 二、 运行功能包自带的赛道1、运行赛道&#xff0c;控制小车进行位移2、进行g…

F1-Measure

转自&#xff1a;http://www.cnblogs.com/sky-zw/p/3600250.html 准确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;以及综合评价指标&#xff08;F1-Measure&#xff09; 在信息检索和自然语言处理中经常会使用这些参数&#xff0c;下面简单介绍…

第十七届全国大学智能汽车竞赛竞速比赛规则

&#xff08;版本&#xff1a;2022-6-21&#xff09; 00 规则导读 参加过往届比赛的队员可以通过下面内容了解第十七届竞赛规则主要变化。如果第一次参加比赛&#xff0c;建议对于本文进行全文阅读。 竞速比赛共分为九个组别&#xff0c;每个组别在比赛环境、比赛任务、单片机平…

【JVM系列】jvm内存结构详解

文章目录 前言HotSpot VM介绍内存结构程序计数器JVM栈本地方法栈Java堆方法区运行时常量池 永久代和元空间永久代&#xff08;PermGen&#xff09;元空间&#xff08;Metaspace&#xff09; 直接内存总结 前言 我们为什么要学习JVM&#xff1f; 面试的需要中高级程序员的必备技…

F1赛车比赛排名问题(oj)

话不多说&#xff0c;直奔主题。 1.要解决同一个人不同场比赛的得分与名次累计&#xff1b; 2.要解决两种排名方式所对应的排序方法&#xff1b;&#xff08;sort函数与cmp定义相配合&#xff09; 题中可得 第一场&#xff1a;apple 25; banana 18 ; pear 15 第二场&#xff1…

F1方程式冠军

【问题描述】 一级方程式F1锦标赛由一系列称为大奖赛的分站赛组成。每一场比赛的车手都根据他们的最后位置获得积分。只有前10名车手按以下顺序获得分数&#xff1a;25、18、15、12、10、8、6、4、2、1。在锦标赛结束时&#xff0c;得分最多的车手是冠军。如果有平分&#xff0…

模拟车辆行驶

在PhysX中提供了模拟各种车辆行驶的接口。一些车辆运动的物理参数都可以通过该物理引擎设置后模拟现实中的车辆行驶。 首先会用到一个车辆的描述器VehiclDesc&#xff0c;它就像一个总的指挥长&#xff0c;负责整个车辆的运作。 1. 自身的物理特性&#xff0c;如车辆在…