AtCoder Beginner Contest 142 题解

2023-05-16

AtCoder Beginner Contest 142 题解

A.Odds of Oddness

◇题目传送门◆

题目大意

给定一个数 N N N,求从 1 1 1 N N N中的数中抽出一个奇数的概率是多少。

分析

水题。

参考程序

#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	int N;
	scanf("%d" ,&N);
	int tmp = 0;
	for(int i = 1; i <= N; i++)
		if(i % 2) tmp++;
	printf("%f", 1.0 * tmp / N);
	return 0;
}

B.Roller Coaster

◇题目传送门◆

题目大意

找出比一个序列中比 K K K大的的数的个数

分析

水题,扫一遍就够了。

参考程序

#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	int N, t, cnt = 0;
	scanf("%d %d", &N, &t);
	for(int i = 1; i <= N; i++) {
		int x;
		scanf("%d", &x);
		if(x >= t) cnt++;
	}
	printf("%d\n", cnt);
	return 0;
}

C.Go to School

◇题目传送门◆

题目大意

给定一个学校里学生来的时间点,求将每个学生按时间顺序排序后输出编号。

分析

将每个数的编号记下来后排序输出即可。

参考程序

#include <cstdio>
#include <algorithm>
using namespace std;

const int Maxn = 1e5;

struct Node {
	int val, id;
	bool operator < (const Node &rhs) const {return val < rhs.val;}
};

int N;
Node A[Maxn + 5];

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	scanf("%d", &N);
	for(int i = 1; i <= N; i++)
		scanf("%d", &A[i].val), A[i].id = i;
	sort(A + 1, A + N + 1);
	for(int i = 1; i <= N; i++)
		printf("%d ", A[i].id);
	return 0;
}

D.Disjoint Set of Common Divisors

◇题目传送门◆

题目大意

给定两个数 A , B A,B A,B,要求选出 gcd ⁡ ( A , B ) \gcd(A,B) gcd(A,B)中的任意的因数,使得这些因数互素。求最多可以选多少个因数。

分析

简单分析一下就可以发现,我们要选的数就是 gcd ⁡ ( A , B ) \gcd(A,B) gcd(A,B)中的不同的质因数个数+1即可(1也可以算在里面)。

参考程序

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;
const int Maxn = 1e6;

ll GCD(ll x, ll y) {
	if(y == 0) return x;
	return GCD(y, x % y);
}

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	ll x, y;
	scanf("%lld %lld", &x, &y);
	int cnt = 1;
	ll g = GCD(x, y);
	for(ll i = 2; i * i <= g; i++) {
		if(g % i == 0)cnt++;
		while(g % i == 0) g /= i;
	}
	if(g > 1) cnt++;
	printf("%d\n", cnt);
	return 0;
}

E.Get Everything

◇题目传送门◆

题目大意

M M M把钥匙和 N N N个箱子,使用第 i i i把钥匙需要 A i A_i Ai的代价,但能打开 B i B_i Bi个箱子(箱子的编号给定),求出打开所有的箱子需要的代价。

分析

考虑到 N N N极其小,所以我们可以考虑状压。

定义状态 f ( i , S ) f(i,S) f(i,S)为用前 i i i把钥匙,打开在集合 S S S中的箱子所用的最小代价。

转移显然,看程序就是了。

参考程序

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int Maxn = 12;
const int Maxm = 1000;
const int INF = 0x3f3f3f3f;

int N, M;
struct Node {
	int A, C;
};
Node A[100000 + 5];

int f[Maxm + 5][(1 << Maxn) + 5];

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	scanf("%d %d" ,&N, &M);
	for(int i = 1; i <= M; i++) {
		int x;
		scanf("%d %d", &A[i].A, &x);
		int t = 0;
		for(int j = 1; j <= x; j++) {
			int tmp;
			scanf("%d", &tmp);
			t |= (1 << (tmp - 1));
		}
		A[i].C = t;
	}
	memset(f, 0x3f, sizeof f);
	f[0][0] = 0;
	for(int i = 1; i <= M; i++) {
		for(int s = 0; s < (1 << N); s++) {
			int s1 = s | A[i].C;
			f[i][s1] = min(f[i][s1], f[i - 1][s] + A[i].A);
			f[i][s] = min(f[i][s], f[i - 1][s]);
		}
	}
	if(f[M][(1 << N) - 1] != INF)printf("%d\n", f[M][(1 << N) - 1]);
	else puts("-1");
	return 0;
}

F.Pure

◇题目传送门◆

题目大意

给定一个有向图图,要求从里面选出一个子图,使得这个子图中所有的点的出度和入度都是1。

分析

分析一下会发现当图中不存在环时是无解的。

那么问题就变成了在图上找到一个环。

具体还是见代码吧。。。

参考程序

#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;

const int Maxn = 1000;
const int Maxm = 2000;

vector<int> G[Maxn + 5];

int N, M;
bool vis[Maxn + 5];
int dep[Maxn + 5], ed;
vector<int> ans;

bool DFS(int u) {
	vector<int> tmp;
	int t = -1;
	for(int i = 0; i < (int)G[u].size(); i++) {
		int v = G[u][i];
		if(dep[v] != -1) {
			if(t == -1) t = v;
			else if(dep[v] > dep[t]) t = v;
		}
		if(!vis[v]) tmp.push_back(v);
		vis[v] = true;
	}
	if(t == -1) {
		for(int i = 0; i < (int)tmp.size(); i++) {
			int v = tmp[i];
			dep[v] = dep[u] + 1;
			if(DFS(v)) {
				if(dep[u] >= dep[ed])
					ans.push_back(u);
				return true;
			}
			dep[v] = -1;
		}
		for(int i = 0; i < (int)tmp.size(); i++)
			vis[tmp[i]] = false;
		return false;
	} else {
		ed = t;
		ans.push_back(u);
		return true;
	}
}

int main() {
#ifdef LOACL
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	scanf("%d %d", &N, &M);
	for(int i = 1; i <= M; i++) {
		int u, v;
		scanf("%d %d", &u, &v);
		G[u].push_back(v);
	}
	memset(dep, -1, sizeof dep);
	for(int i = 1; i <= N; i++) {
		memset(vis, false, sizeof vis);
		vis[i] = true, dep[i] = 0;
		if(DFS(i)) {
			printf("%d\n", ans.size());
			for(int i = (int)ans.size() - 1; i >= 0; i--)
				printf("%d\n", ans[i]);
			return 0;
		}
		dep[i] = -1;
	}
	puts("-1");
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AtCoder Beginner Contest 142 题解 的相关文章

随机推荐

  • 牛客网高级项目总结

    1 注册和登陆 登陆和注册成功之后 xff0c 在cookie里添加上token xff0c 另外在数据库中插入包含token userId的表 xff0c 用于登陆状态检验 具体检验是在拦截器上进行 xff0c 拦截器的实现过程 xff1
  • 设计模式

    面向对象设计原则 每个对象是拥有独立责任的抽象体 真正的复用是源代码不做修改 xff0c 编译 43 测试之后就不会再修改 设计原则 1 依赖倒置原则 xff08 DIP xff09 1 xff09 高层模块 xff08 稳定 xff09
  • Redis面试

    1 更新操作 https coolshell cn articles 17416 html 不可以先删除缓存 xff0c 再更新数据库 因为并发操作下 xff0c 一个更新操作删掉了缓存 xff0c 此时一个读操作进来 xff0c 读取了旧
  • 【关系代数习题】纸上得来终觉浅——数据库学习之路(4)

    题A 设有如下所示的关系S S SNAME AGE SEX C C CNAME TEACHER 和SC S C GRADE xff0c 用关系代数表达式表示下列查询语句 xff1a 1 检索 程军 老师所授课程的课程号 C 和课程名 CNA
  • 线程池

    public ThreadPoolExecutor int corePoolSize int maximumPoolSize long keepAliveTime TimeUnit unit BlockingQueue lt Runnabl
  • 爬取3499手游网下载地址信息

    爬取3499手游网下载地址信息 爬取游戏的下载地址和信息 xff0c 爬取的信息存入到数据库中 1 首先需要安装第三方库 requests xff0c lxml xff0c MySQLdb 2 先创建down software数据库 创建y
  • %d几种输出方式

    d就是普通的输出了 2d是将数字按宽度为2 xff0c 采用右对齐方式输出 xff0c 如果数据位数不到2位 xff0c 则左边补空格 2d是将数字按宽度为2 xff0c 采用左对齐方式输出 xff0c 如果数据位数不到2位 xff0c 则
  • qt开启线程界面假死问题解决

    一 前言 在 使用qt高速读取传感器数据时 xff0c 如果想要将数据实时刷新在界面 xff0c 就需要开启一个线程单独去跑读取数据函数 xff0c 并反馈给主程序 xff0c 否则在主程序中读取和刷新界面会很卡很卡 xff0c 但是在开启
  • Ubuntu Qt安装arm指定的交叉编译环境SDK方式(概述篇)

    一 前言 苦心研究了几天交叉编译环境的安装 xff0c 因为工作需要 xff0c 要在一个arm系统上运行程序 xff0c 正常已经搭配好环境了 xff0c 见此贴 xff0c 后来改为SDK的方式更好使用 xff0c 但是SDK的方式对环
  • Jetson Xavier ubuntu18.04配置vnc进行远程桌面连接

    NVIDIA Jetson Xavier开发板装不上基于gnome桌面的VNC 由于ubuntu上有多个版本的VNC 尝试了vnc4server 43 xfce4后可远程控制 xff0c 因此记录下来方便后面继续装环境 1 安装 span
  • rust gui开发 根据官网例子学习orbtk(1)

    orbtk计算器例子 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive s
  • rust gui开发 根据官网例子学习orbtk(2)

    orbtk基础组件 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive sp
  • rust gui开发 根据官网例子学习orbtk(3)

    多窗口显示 效果图 依赖 orbtk span class token operator 61 span span class token string 34 0 3 1 alpha3 34 span serde derive span c
  • Maven多仓库配置

    有两种方式配置Maven多仓库 setting xml文件的profiles标签pom xml文件的repositories标签 在使用多仓库配置时 xff0c 不管使用哪种方式 xff0c 必须先将setting xml文件中的mirro
  • Anaconda配置新的环境出现出错

    问题描述 在我使用Anaconda配置新的环境是 xff0c Anaconda出现了如下的错误 xff1a Solving environment failed CondaHTTPError HTTP 000 CONNECTION FAIL
  • iOS Touch事件UIControlEvents详解

    刚开始学习UI界面的时候 xff0c 自己用stroyboard拖按钮到控制器里面 xff0c 会发现方法默认都是UIControlEventTouchUpInside xff0c 然后我翻了一下苹果的官方文档 xff0c 发现UICont
  • Maven引用本地jar包以及打包发布注意事项

    1 Maven引用本地jar包 首先在resources目录下创建名为 lib 的文件夹 xff0c 然后将本地jar包放入该文件夹下 xff0c 如图 然后在pom文件中引用该jar包 lt dependency gt lt groupI
  • Win10 Sublime 配置C++编译环境(MinGW64),与Anaconda Python共存

    将 Dev Cpp 5 11所在目录 MinGW64 bin 添加至系统环境变量 sublime gt Tools gt Build System gt New Build System 修改文件内容为 xff1a 34 encoding
  • hadoop学习之fileSystem.copyToLocalFile执行报错

    在网上一搜 xff0c 直接改成fileSystem copyToLocalFile xff08 false xff0c xx xff0c xx xff0c true xff09 即可 但是基本上就这一句 xff0c 也不说为啥 xff0c
  • AtCoder Beginner Contest 142 题解

    AtCoder Beginner Contest 142 题解 A Odds of Oddness 题目传送门 题目大意 给定一个数 N N N xff0c 求从 1 1 1 到