AtCoder Regular Contest 176(ARC176)A、B

题目:AtCoder Regular Contest 176 - tasks
官方题解:AtCoder Regular Contest 176 - editorial
参考:atcoder regular 176 (ARC176) A、B题解


A - 01 Matrix Again

题意

给一个n×n的方格,给出m个坐标(x,y)×m,在方格中选择一些格子填入1,要求填完后每行有m个1,每列有m个1,并且之前给出的坐标对应方格中也是1,输出一种可能的方案。

思路(依照官方题解)

容易得出一共要选n×m个格子
当m=1时
需要选n个格子,每行每列都要一个1,其中有一个格子坐标给定为(x0, y0)。如何保证每行每列一个呢?可以让行坐标x+列坐标y(模n)固定,x遍历0~(n - 1)时,y也遍历0~(n - 1)。那x+y的和怎么选呢?显然只能是x0 + y0
于是可以令k = (x0 + y0) % n,x遍历0~(n - 1),y = (k - x + n) % n。
当m!=1时
既然固定一个x + y = k能选出n个格子,并且保证每行每列一个,那么能不能选出m个不同的k,达到每行每列m个呢?答案是可以的,当k互不相同时,每个k选出的n个点和其他k选出的不会有交集。
现在就只剩怎么选出m个不同的k,使得给定的那些点在我们会选出的点集里了。
如果给定的点里有(xi, yi),显然k = (xi + yi) % n是一定要选的。但是一个k也可能对应多个给定的点,所以只要对所有给定点(xi, yi),选上k = (xi + yi) % n(就选一次不能重复),剩下的没选过的数中随便挑几个凑够m个即可。

代码
#include <vector>
#include <iostream>
#include <cstdio>
#include <ctime> 
#include <algorithm>
using namespace std;typedef long long ll;
const int N = 1e5 + 5;int vis[N];
vector<int> setk; int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int n, m;cin >> n >> m;for (int i = 0; i < m; i++){int x, y;cin >> x >> y;vis[(x + y - 2) % n] = 1;}for (int i = 0; i < n; i++)if (vis[i]) setk.push_back(i);for (int i = 0; i < n; i++)if (!vis[i] && setk.size() < m) setk.push_back(i);cout << n * m << endl; for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){int x = j + 1, y = (setk[i] - j + n) % n + 1;cout << x << ' ' << y << endl;}}  return 0;
}

B - Simple Math 4

思路(官方题解)

  1. n >= m时:
    在这里插入图片描述(注意一定是n >= m,这样2n-m才是整数)
    这样把n变小
  2. n < m时:
    当2n = 2m - 2k时(也就是n = k = m - 1),答案为0
    否则有2n < 2m - 2k,答案就是2n % 10

代码

容易发现2n最后一位是2、4、8、6循环的,得到n之后可以直接按周期算出个位数

#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;typedef long long ll;
const int N = 2e5 + 5;int re[4] = {2, 4, 8, 6};int main()
{int T; cin >> T;while (T--){ll m, n, k;cin >> n >> m >> k;if (n >= m) n = n - (n - m) / (m - k) * (m - k);if (n >= m) n -= m - k;if (n == m - 1 && k == m - 1) cout << 0 << endl;else cout << re[(n - 1) % 4] << endl;}return 0;
}

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

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

相关文章

一个简单的仓库出入库管理软件的流程是什么样的?有哪些功能?

身为仓库文员&#xff0c;我深知仓库管理对于公司运营的重要性。仓库是公司物资的中转站&#xff0c;其管理的好坏直接关系到公司的运营效率和成本控制。然而&#xff0c;传统的仓库管理方式往往存在着效率低下、易出错等问题&#xff0c;为了解决这些问题&#xff0c;我们需要…

stm32f103zet6_DAC_1_介绍

STM32微控制器系列的DAC&#xff08;数字到模拟转换器&#xff09;功能是其片上外设之一&#xff0c;用于将数字信号转换为模拟信号。DAC在许多应用中都非常有用&#xff0c;例如音频输出、模拟信号生成、闭环控制系统中作为模拟输出等。 STM32微控制器的DAC功能特点包括&…

Sy9-dhcp/dns服务配置

前言、 课程需要&#xff08;进入服务器综合配置使用阶段了&#xff09;&#xff0c;这里还是沿用桌面版的ubuntu来配置dhcp和dns&#xff0c;这里updated了新的版本。2024.5 server端环境&#xff1a; Win11VMS&#xff1a;192.168.105.1192.168.105.128 &#xff08;ubuntu…

搜索算法系列之四(斐波那契)

以下算法被验证过&#xff0c;如有什么问题或有补充的欢迎留言。 前言 斐波那契数列&#xff0c;又称黄金分割数列&#xff0c;是由意大利数学家&#xff08;Leonardo Fibonacci&#xff09;在1202年提出的。这个数列的递推关系是F(0)1&#xff0c;F(1)1&#xff0c;F(n)F(n-…

Vscode 总是发现不到包package

Vscode 右下角&#xff0c;选择3.8.6就不再报错&#xff0c;其他最新版本的3.11.7就不行。

嵌入式学习67-C++(多线程,自定义信号合槽,串口通信)

知识零碎&#xff1a; QmessageBox 报错提示框 GPS传感器获取到的 经纬度信息并不是真实的物理坐标&#xff0c;还需要转换 signals&#xff1a; …

NEO 学习之session7

文章目录 选项 A&#xff1a;它涉及学习标记数据。 选项 B&#xff1a;它需要预定义的输出标签进行训练。 选项 C&#xff1a;它涉及在未标记的数据中寻找模式和关系。 选项 D&#xff1a;它专注于根据输入-输出对进行预测。 答案&#xff1a;选项 C 描述了无监督学习的本质&am…

杭电acm1013 Digital Roots 数字根 Java解法 高精度

Problem - 1013 (hdu.edu.cn) 高精度算术模拟 开long没过想到开bI 开bl一次过 import java.math.BigInteger; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);BigInteger i;while (!(i sc.nextB…

部署Gerapy

1.Gerapy 是什么&#xff1f; Gerapy 是一款基于 Python 3 的分布式爬虫管理框架&#xff0c;它旨在简化和优化分布式爬虫的部署、管理和监控过程。 2.作用与功能&#xff1f; 2.1分布式管理&#xff1a; Gerapy 允许用户在多台机器上部署和管理Scrapy爬虫&#xff0c;实现爬虫…

Nftables漏洞原理分析(CVE-2022-32250)

前言 在nftales中存在着集合(sets)&#xff0c;用于存储唯一值的集合。sets 提供了高效地检查一个元素是否存在于集合中的机制&#xff0c;它可以用于各种网络过滤和转发规则。 而CVE-2022-32250漏洞则是由于nftables在处理set时存在uaf的漏洞。 环境搭建 ubuntu20 QEMU-4…

MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)

目录 ▐ 特定列查询 ▐ 逻辑处理 ▐ 字符函数操作 ▐ 分组函数统计 ▐ 数学函数 ▐ 日期函数 ▐ 条件查询 ▐ 排序 ▐ 数量限制 ▐ 合并 ▐ 分组查询 ▐ 前言&#xff1a; • DQL全称 Data Query Language 数据查询语言 • 可以从一个表中查询数据&#xff0c;也…

连锁收银系统批量调整商品价格教程

1、进入系统后台&#xff0c;系统后台登录网址&#xff1a; 2、点击商品>商品调价 3、将按模板整理好的商品价格数据导入即可。 Tips&#xff1a;每次导入的商品数量不要超过6000 条。