第十三届山东省ICPC

news2025/1/10 2:05:39

vp链接:https://codeforces.com/gym/104417

A. Orders

根据题意模拟,分别按照 a,b 排序,排序后再判断该订单是否能完成。

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 105;
int n, k;
struct node { int a, b; } p[N];

inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}

bool cmp(node x, node y) {
    if (x.a == y.a) return x.b < y.b;
    return x.a < y.a;
}

void solve() {
    n = read(), k = read();
    for (int i = 1; i <= n; i++) p[i].a = read(), p[i].b = read();
    sort(p + 1, p + n + 1, cmp);
    int res = 0, lst = 0;
    for (int i = 1; i <= n; i++) {
        res += (p[i].a - lst) * k;
        if (res < p[i].b) {
            puts("No");
            return;
        }
        res -= p[i].b, lst = p[i].a;
    }
    puts("Yes");
}

signed main() {
    int t = read();
    while (t--) {
        solve();
    }
	return 0;
}

E. Math Problem

很容易发现先进行操作一再进行操作二是无效的,所以只有两种操作方式:

  1. 一直进行操作一
  2. 先进行操作而再进行操作一
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n, k, m, a, b;

void solve() {
	if (k == 1) {
		if (n % m == 0) cout << 0 << '\n';
		else cout << -1 << '\n';
		return;
	}
	int ans = LLONG_MAX;
	for (int i = 0; ;i++, n /= k) {
		if (n == 0) {
			ans = min(ans, i * b);
			break;
		}
		__int128_t l = n, r = n;
		int sum = b * i;
		while (r / m == l / m && l % m != 0) {
			l = l * k;
			r = r * k + k - 1;
			sum += a;
		}
		ans = min(ans, sum);
	}
	cout << ans << '\n';
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t;
	cin >> t;
	while (t--) {
		cin >> n >> k >> m >> a >> b;
		solve();
	}
	return 0;
}

G. Matching

i - j = a_i - a_j 等价于 i - a_i = j - a_j,不妨设 b_i = i - a_i,所有有边连通的点 b_i 一定相同。从无向图中选出一些边,使得任意两条边都没有公共节点,等价于成对地选出 b 值相同的点。由于连接 i 和 j 的节点边权为 a_i + a_j,要最大边权和,其实等价于求成对选出的点的最大点权和。

可以先按照 b_i 进行排序,b_i 相同则按照 a_i 从小到大进行排序。对于 b 相同的节点,从前往后成对的选出点权和大于 0 的点,记录点权和。

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 1e5 + 10;
int n;
struct node { int a, b, id; } p[N];

inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}

bool cmp(node x, node y) {
	if (x.b == y.b) return x.a > y.a;
	return x.b < y.b;
}

signed main() {
	int t = read();
	while (t--) {
		n = read();
		for (int i = 1; i <= n; i++) {
			p[i].a = read();
			p[i].id = i, p[i].b = i - p[i].a;
		}
		sort(p + 1, p + n + 1, cmp);
		int ans = 0LL;
		for (int i = 1; i <= n; i++) {
			if (i + 1 <= n && p[i].b == p[i + 1].b) {
				if (p[i].a + p[i + 1].a > 0) {
					ans += p[i].a + p[i + 1].a;
					i++;
				}
			}
		}
		printf("%lld\n", ans);
	}
	return 0;
}

L. Puzzle: Sashigane

构造题。围绕黑色方格利用两条边长度相等的 L 型进行覆盖,可以使得黑色方格以及白色方格覆盖的区域有 1 x 1 变成 2 x 2,2 x 2 变成 3 x 3,......,最后变成 n x n。

每一次利用 L 型进行覆盖的时候,只需要在原有覆盖区域外四角的任意一角作为 L 型的拐点即可。

#include <bits/stdc++.h>
using namespace std;

const int N = 1e3 + 5;
int n;
struct node { int r, c, h, w; } ans[N];

inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}

bool check(int x, int y) {
	if (x >= 1 && x <= n && y >= 1 && y <= n) return true;
	return false;
}

void dfs(int x, int y, int len) {
	if (len > n) return;
	int l = len - 1;
	if (check(x - l, y + l)) {
		ans[l] = (node){x - l, y + l, l, -l};
		dfs(x, y, len + 1);
		return;
	}
	if (check(x - l, y - 1)) {
		ans[l] = (node){x - l, y - 1, l, l};
		dfs(x, y - 1, len + 1);
		return;
	}
	if (check(x + 1, y + l)) {
		ans[l] = (node){x + 1, y + l, -l, -l};
		dfs(x + 1, y, len + 1);
		return;
	}
	if (check(x + 1, y - 1)) {
		ans[l] = (node){x + 1, y - 1, -l, l};
		dfs(x + 1, y - 1, len + 1);
		return;
	}
}

int main() {
	n = read(); int x = read(), y = read();
	dfs(x, y, 2);
	printf("Yes\n%d\n", n - 1);
	for (int i = 1; i < n; i++) printf("%d %d %d %d\n", ans[i].r, ans[i].c, ans[i].h, ans[i].w);
	return 0;
}

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

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

相关文章

C#索引器(Indexer)

索引器(Indexer)允许一个对象可以像数组一样使用下标的方式来访问. 当为类定义一个索引器时,该类的行为就会像一个虚拟数组(virtual array) 一样.可以使用数组访问运算符[]来访问该类的成员. 语法 一维索引器的语法如下: element-type this[int index] { // get 访问器 …

Minimax-秋招正式批-面经(SQL相关)

1. 谈谈对聚簇索引的理解 聚簇索引 InnoDB通过主键聚集数据&#xff0c;如果没有定义主键&#xff0c;InnoDB会选择非空的唯一索引代替。如果没有这样的索引&#xff0c;InnoDB会隐式定义一个主键来作为聚簇索引聚簇索引就是按照每张表的主键构造一颗B树&#xff0c;同时叶子…

中国书法——孙溟㠭浅析碑帖《越州石氏帖》

孙溟㠭浅析碑帖《越州石氏帖》 《越州石氏帖》 是一部汇集多本摹刻的帖&#xff0c;南宋时期的会稽石邦哲&#xff08;字熙明&#xff09;把家藏的一些法书碑帖集中一起摹刻成的&#xff0c;宋理宗时临安书商陈思《宝刻丛编》有记載这部帖的目录。现在还存有宋代时拓的残缺本…

golang hertz框架入门

两种模式新建项目 1、手动新建项目 2、使用hz工具新建项目 一、手动创建项目&#xff0c;并拉取框架 1、新建项目目录 hertz_demo_w 2、在项目跟目录新建main.go 文件 package mainimport ("context""github.com/cloudwego/hertz/pkg/app""github.…

WPS如何查看已添加到词典的单词

WPS Office&#xff08;12.1.0.17827&#xff09; ① 点击文件&#xff0c;在文件中找到选项 ② 找到拼写检查并点击自定义词典 ③ 如果要删除已添加到词典的"错词"&#xff0c;则点击修改 ④ 选择"错词", 点击删除

电工基础知识

1、电工常用的电工工具 2、PPR常用配件名称 3、铜芯导线如何选择线鼻子 4、丝锥孔径对照表 5、三相电机接线方法_星形_角型 6、内六角螺铨尺寸表 7、常用螺母规格尺寸 8、常用螺栓螺母名称 9、灭火器分类使用 10、电缆颜色使用代码 11、电缆铜铝鼻子 12、空气开关

力扣第一题:两数之和

文章目录 需求分析代码结尾 需求 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你…

Hexo博客构建记录

开学了&#xff0c;准备让休息了两个月的大脑重新活动一下筋骨&#xff0c;就尝试了一下Hexo博客的简单构建。在这里记录一下&#xff0c;方便以后使用。 以下是笔者搭建时用到的教程 简单搭建教程 简单&#xff0c;虽然个人感觉布局有点乱&#xff0c;关于上传文章的介绍略…

如何下载各个版本的tomcat-比如tomcat9

1&#xff0c;找到tomcat官网https://tomcat.apache.org/ Apache Tomcat - Welcome! 找到tomcat9&#xff0c;或者archives 1.1&#xff0c;找到对应版本 1.2&#xff0c;找到小版本 1.3&#xff0c;找到bin 2&#xff0c;Index of /dist/tomcat/tomcat-9/v9.0.39/bin 2.1&a…

七牛云存储OSS基本使用测试(超详细!!!)

首先就是注册&#xff0c;然后实名认证&#xff0c;这没什么可教的 认账成功后&#xff0c;点击对象存储Kodo 点击左侧空间管理&#xff0c;新建空间 输入一个名字&#xff0c;存储区域选择距离你地址比较近的&#xff0c;访问控制选择公开(这样别人在访问时也可以看到) 这样就…

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统&#xff0c;用于网页设计。通过使用网格&#xff0c;你可以将内容以行和列的形式进行排列。此外&#xff0c;网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局&#xff1f; CSS网格布局是一种二维布局系统&#xff0c;它允许…

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的 会有一个中断源&#xff0c;也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件&#xff0c;也就是产生中断信号&#xff0c;就会执行中断服务函数 但是CPU是如何知道中断源产生后就找到对应的中断…

Redis持久化机制—RDB与AOF

Redis持久化机制 RDB&#xff08;默认&#xff09; **思想&#xff1a;**保存整个数据库的快照&#xff0c;也就是RDB文件&#xff0c;有两种保存方式&#xff0c;前台保存save和后台保存bgsave&#xff0c;前者会阻塞主进程程&#xff0c;后者则是fork一个子进程去完成备份操…

ffmpeg的安装和使用教程及案例

FFmpeg的安装与使用教程 一、FFmpeg简介 FFmpeg是一个开源的、跨平台的音视频处理工具&#xff0c;可以用来转换、播放、录制、流化音视频数据&#xff0c;以及进行多种音视频编码和解码。 二、安装FFmpeg 1. Windows系统安装 下载预编译的二进制文件&#xff1a;从FFmpeg…

828华为云征文|华为云服务器Flexus X搭建悟空crm管理系统——助力企业云上管理(解决APP Referer校验失败问题)

1、为什么我们企业会选择Flexus云服务器X实例来部署自己的CRM管理系统&#xff1f; 因为基于华为云Flexus X实例搭建CRM管理平台&#xff0c;可以从容面对企业内部瞬息万变的业务压力变化 2、华为云服务器Flexus X方案及优势&#xff1a; 灵活伸缩 搭配弹性伸缩服务AS及负载均…

Python Flask 实现图片上传页面

其中index.html文件&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Image and Text U…

地理信息系统设计与开发第一次作业,配置QGIS二次开发环境

我是根据这篇来配置的&#xff1a;QGIS二次开发环境配置&#xff08;VS2019QT5.12.2QGIS3.26.3&#xff09;-CSDN博客 其中&#xff0c; 我错误的理解了这里的意思&#xff0c;这些bin里面的东西和exe要在一个目录下。然后就不会有这样的问题了&#xff0c;

Swift知识点---RxSwift学习

1. 什么是RxSwift RxSwift是Swift函数响应式编程的一个开源库&#xff0c;由Github的ReactiveX组织开发、维护 RxSwift的目的是&#xff1a;让数据/事件流 和 异步任务能够更方便的序列化处理&#xff0c;能够使用Swift进行响应式编程 RxSwift本质上还是观察者模式&#xff…

栈—数据结构

一、系统栈 系统栈&#xff08;System Stack&#xff09;&#xff1a; 用途&#xff1a;系统栈通常指的是调用栈&#xff08;Call Stack&#xff09;&#xff0c;它用于存储程序执行期间的函数调用信息。每当一个函数被调用时&#xff0c;系统栈会记录这个调用的状态&#xff0…

notepad下载安装使用以及高级使用技巧

前言 Notepad是一款广受欢迎的文本编辑器&#xff0c;尤其受到开发者和编程人员的喜爱。它支持多种编程语言的语法高亮显示&#xff0c;并且提供了丰富的插件系统&#xff0c;使得功能可以轻松扩展。本文将详细介绍如何在Windows操作系统上下载、安装Notepad&#xff0c;以及基…