首页 > 其他分享 >Atcoder补题计划

Atcoder补题计划

时间:2022-10-24 10:15:37浏览次数:94  
标签:std Atcoder Copy int res 计划 补题 include match

◉ ABC274

F - Fishing

// 枚举作为左端点的鱼
// 每条鱼有一个在这个区间中的时间段
// 计算出与长度为 a 的区间有交集的时间的区间的权值的最大值
// 时间的区间(离散化->)差分->每一段的权值的最大值

点击查看代码
Source Code 

Copy
Copy

#include <map>
#include <stdio.h>
#include <string.h>
#include <algorithm>
const int N = 2005;
int n, a, w[N], x[N], v[N], res;
int main() {
	scanf("%d%d", &n, &a);
	for(int i = 1; i <= n; i ++) scanf("%d%d%d", w + i, x + i, v + i);
	for(int i = 1; i <= n; i ++) {
		int ans = 0;
		std::map<double, int> d;
		for(int j = 1; j <= n; j ++)
			if(v[i] == v[j]) {
				if(x[j] <= x[i] && x[i] <= x[j] + a) ans += w[j]; // 现在 ans 为与第 i 条鱼相对静止的鱼的权值和
			} else {
				double l = double(x[j] - x[i]) / (v[i] - v[j]), r = double(a + x[j] - x[i]) / (v[i] - v[j]);
				if(l > r) std::swap(l, r);
				if(r >= 0) d[std::max(l, 0.0)] += w[j], d[r + 1e-10] -= w[j];
			}
		res = std::max(res, ans);
		for(auto [p, q] : d) res = std::max(res, ans += q);
	}
	printf("%d\n", res);
	return 0;
}

G - Security Camera 3

// 转化为二分图最小点覆盖问题:使用二分图最大匹配
// 只用考虑朝向右边或下边的摄像头
// 建图: 每行每列找到所有最长连续的空地
// 建边: 对于所有空地, 将其在行中的编号和在列中的编号建边
// .#.# 1#2# 1#4#
// #... #333 #345
// ...# 444# 234#
// ##.# ##5# ##4#

点击查看代码
Source Code 

Copy
Copy

#include <vector>
#include <stdio.h>
#include <string.h>
const int N = 302;
int n, m, p, q;
char g[N][N];
int id1[N][N], id2[N][N];
std::vector<int> e[N * N];
bool st[N * N]; int match[N * N];
bool find(int x) {
	for(int y : e[x])
		if(!st[y]) {
			st[y] = true;
			if(match[y] == -1 || find(match[y])) {
				match[y] = x; return true;
			}
		}
	return false;
}
int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i ++) scanf("%s", g[i] + 1);
	for(int i = 1; i <= n; i ++) {
		if(g[i-1][m] != '#') ++ p;
		for(int j = 1; j <= m; j ++)
			if(g[i][j] == '.') id1[i][j] = p;
			else if(g[i][j-1] != '#') ++ p;
	}
	for(int j = 1; j <= m; j ++) {
		if(g[n][j-1] != '#') ++ q;
		for(int i = 1; i <= n; i ++)
			if(g[i][j] == '.') id2[i][j] = q;
			else if(g[i-1][j] != '#') ++ q;
	}
	for(int i = 1; i <= n; i ++)
		for(int j = 1; j <= m; j ++)
			if(g[i][j] == '.') e[id1[i][j]].push_back(id2[i][j]);
	memset(match, -1, sizeof(match));
	int res = 0;
	for(int i = 1; i <= p; i ++) {
		if(i != 1) memset(st, 0, sizeof(st));
		if(find(i)) res ++;
	}
	printf("%d\n", res);
	return 0;
}

标签:std,Atcoder,Copy,int,res,计划,补题,include,match
From: https://www.cnblogs.com/azzc/p/16820586.html

相关文章

  • D - Robot Arms 2 -- ATCODER
    D-RobotArms2题目:https://atcoder.jp/contests/abc274/tasks/abc274_d参考:https://zhuanlan.zhihu.com/p/576281206 分析dfs或者bfs最大复杂度2^1000,超时......
  • 本周计划(10.24)
    今天是周一上周计划完成情况:上一周计划完成的非常差,刚开始学算法,我的畏难情绪非常强,一直学不下去,对于不是很难的算法也理解不了。这一周一定要克服!完成了git的快速入门......
  • C语言的学习计划
    第1天数据结构、算法的概念和作用,结构化程序设计的方法、三种基本结构,程序流程图和N-S流程图第2天C程序的一些特点、标识符和关键字的概念编译、链接和运行的概......
  • Atcoder ABC274 记录
    [ABC274A]BattingAverage略。[ABC274B]LineSensor略。[ABC274C]Ameba建树维护亲代关系即可。[ABC274D]RobotArms2按下标奇偶性分为两类,然后分别做一遍背包......
  • AtCoder Regular Contest 100 E-Or Plus Max
    DescriptionThereisanintegersequenceoflength\(2^N\):\(A_0,A_1,...,A_{2^N-1}\).(Notethatthesequenceis0-indexed.)ForeveryintegerKsatisfying......
  • Atcoder Regular Round #151 B题 A < AP 题解
    题意:给定一个排列\(p\),求满足下列条件的\(a\)数组的数量。\(1\lea_i\lem\)。\(a\)数组的字典序小于\(\{a_{p_1},a_{p_2},\cdots,a_{p_n}\}\)。题解:由于每......
  • 进程及计划任务管理
    一、程序和进程的关系1、程序保存在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码2、进程在CPU及内存中运行的程序代码动态执行的代码父、子进程......
  • Python学习三天计划-3
    面向对象一、类的定义1.类定义class是关键字,表示要定义类了类的属性,即定义在类中的变量(成员变量)类的行为,即定义在类中的函数(成员方法)2.对象创建类对象的语法:cl......
  • AtCoder Beginner Contest 274
    E-BoosterTSP问题变种,典中典。AC代码//Problem:E-Booster//Contest:AtCoder-キーエンスプログラミングコンテスト2022(AtCoderBeginner//Contest274)URL......
  • 测试计划
    2.1测试计划介绍2.1.1定义制定测试目的、范围、方法、时间进度及软件测试重点的过程2.2测试计划模板内容测试目的、测试资源、测试范围、测试风险、人员分工、测试......