当前位置: 首页 > news >正文

AtCoder Beginner Contest 232(A-G)

A - QQ solver (atcoder.jp)直接按题意模拟即可。

B - Caesar Cipher (atcoder.jp)按题意模拟即可

C - Graph Isomorphism (atcoder.jp)按题意模拟即可

D - Weak Takahashi (atcoder.jp) 一个非常套路的网格dp

E - Rook Path (atcoder.jp)

        (1)题意

                有一个H*W的网格,网格中有一个车初始在(x1,y1)这个位置,高桥操作K次后达到(x2,y2)的方案数是多少,每一次移动可以挪到一行或者这一列的任意一个位置上去,但是不能在原始位置。

        (2)思路

                考虑K不大,我们进行O(K)的dp。

                定义dp[i][0]表示前i步操作操作完后和最终位置行列都不同的方案数

                定义dp[i][1]表示前i步操作操作完后和最终位置列相同的方案数

                定义dp[i][2]表示前i步操作操作完后和最终位置列相同的方案数

                定义dp[i][3]表示前i步操作操作完后和最终位置行列都相同的方案数

                1.首先若第i步操作想要变成行列都相同,则前(i - 1)步一定是行相同或者列相同

                        dp[i][3] = dp[i - 1][2] + dp[i - 1][1]

                2.若第i步操作只要变成行相同,那么前面可能是通过行相同,但第i步走到了不同列,或者是前面i-1步行列都不同走到这行上来了,或者是前面行列都一样,走到不同的列去了。

                        dp[i][2] = dp[i - 1][2] * (w - 2) + dp[i - 1][0] + dp[i - 1][3] * (w - 1)

                3.若第i步操作只要变成列相同,那么前面可能是通过列相同,但第i步走到了不同行,或者是前面i-1步行列都不同走到这列上来了,或者是前面行列都一样,走到不同的行去了。

                        dp[i][1] = dp[i - 1][1] * (h - 2) + dp[i - 1][0] + dp[i - 1][3] * (h - 1)

                4.若第i步操作想要变成行列都不同,那么可能是通过行相同,然后走到了不同行,或者是列相同走到了不同列,或者是行列都不同又走到了行列都不同。

                        dp[i][0] = dp[i - 1][2] * (h - 1) + dp[i - 1][1] * (w - 1) + dp[i - 1][0] * (w - 2) + dp[i - 1][0] * (h - 2)

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 1e6 + 10;
ll dp[N][4];
const ll mod = 998244353;
void solve()
{ll h,w,k;cin >> h >> w >> k;int x1,y1,x2,y2;cin >> x1 >> y1 >> x2 >> y2;if(x1 == x2 && y1 == y2) dp[0][3] = 1;else if(x1 == x2) dp[0][2] = 1;else if(y1 == y2) dp[0][1] = 1;else dp[0][0] = 1;//3 :行列都相同,2:行相同 1:列相同 0:行列都不同rep(i,1,k) {dp[i][3] = dp[i - 1][2] + dp[i - 1][1];dp[i][2] = dp[i - 1][2] * (w - 2) % mod + dp[i - 1][0] + dp[i - 1][3] * (w - 1) % mod;dp[i][1] = dp[i - 1][1] * (h - 2) % mod + dp[i - 1][0] + dp[i - 1][3] * (h - 1) % mod;dp[i][0] = dp[i - 1][2] * (h - 1) % mod + dp[i - 1][1] * (w - 1) + dp[i - 1][0] * (w - 2) % mod + dp[i - 1][0] * (h - 2) % mod;rep(j,0,3) dp[i][j] %= mod;}cout << dp[k][3];
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

F - Simple Operations on Sequence (atcoder.jp)

        (1)题意

                给你一个长度为N的A序列和一个长度为N的B序列,你每次可以对A的一个元素进行加1或减1,这个操作一次花费X元,你也可以对A的一个元素i进行交换,交换A[i]和A[i + 1],这个操作花费Y元,问你使得A序列变成B序列的最小花费是多少?

        (2)思路

                考虑N不大,我们直接进行状压dp,dp[i]表示i这个点集我已经匹配了多少个A序列的位置,匹配了B的哪些位置需要的最小花费。

                那么考虑转移首先枚举我要放的位置(也就是A未匹配的位置),我们把A[j]这个元素放到z这个位置上去,考虑前面已经放了met个,那么你一定需要交换met次。

                最终输出dp[(1 << N) - 1]即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 20;
ll dp[1 << N];
int a[N],b[N];
void solve()
{ll n,X,Y;cin >> n >> X >> Y;rep(i,0,n - 1) cin >> a[i];rep(i,0,n - 1) cin >> b[i];memset(dp,0x3f,sizeof(dp));dp[0] = 0;for(int i = 0;i < (1 << n);i ++) {int z = __builtin_popcount(i),met = 0;for(int j = n - 1;j >= 0;j --) {if(!(i >> j & 1)) {dp[i | (1 << j)] = min(dp[i | 1 << j],dp[i] + 1ll * abs(a[j] - b[z]) * X + 1ll * met * Y);}else met ++;}}cout << dp[(1 << n) - 1];
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

G - Modulo Shortest Path (atcoder.jp)

        (1)题意

                给你两个序列A和B,你有一条从i->j的权值为(A[i] + B[j]) % M的边,问你从1走到N的最短路径是多长。

        (2)思路

                考虑暴力,我们建边都要N^2,显然不可行,考虑优化建边。

                对于A序列我们把i向M - A[i]连一条权值为0的边,对于B序列我们把B[i]向i连一条权值为0的边,对于[0,M - 1]把0->1,1->2.....M - 2->M - 1连一条权值为1的边,这样图就变成了这样。

                

        为什么要向M-A[i]连边而不是向A[i]连边呢?我们考虑分类讨论一下,画一下横坐标就行了。

        好,现在我们的建边从N^2变成了2*N+M,显然M太大过不了,那么考虑其实有些边是用不到的,比如说0-1->2->3->4->5,难道我真要一步步跳过去?显然不可能,我们可以直接压缩成0->5。那哪些模数要用到呢,实际上就是我们建边用的M - a[i]和b[i],从小的向大的连一下即可,然后跑一个最短路就做完了。        

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 6e5 + 10;
vector<PII> e[N];
int a[N],b[N];
ll dis[N];
vector<int> ver;
int get(int x)
{return lower_bound(all(ver),x) - ver.begin() + 1;
}
inline ll dij(int s,int t)
{memset(dis,0x3f,sizeof(dis));dis[s] = 0;priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> q;q.push({dis[s],s});while(!q.empty()) {auto [val,u] = q.top();q.pop();for(auto [v,w]: e[u]) {if(dis[v] > val + w) {dis[v] = val + w;q.push({dis[v],v});}}}return dis[t];
}
void solve()
{int n,m;cin >> n >> m;rep(i,1,n) {cin >> a[i];a[i] = (m - a[i]) % m;ver.pb(a[i]);}rep(i,1,n) {cin >> b[i];ver.pb(b[i]);}sort(all(ver));rep(i,1,n) {a[i] = get(a[i]);b[i] = get(b[i]);e[i + sz(ver)].pb({a[i],0});e[b[i]].pb({i + sz(ver),0});}rep(i,1,sz(ver) - 1) {e[i].pb({i + 1,ver[i] - ver[i - 1]});}e[sz(ver)].pb({1,(ver[0] -ver[sz(ver) - 1] + m) % m});cout << dij(1 + sz(ver),n + sz(ver));
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

相关文章:

AtCoder Beginner Contest 232(A-G)

A - QQ solver (atcoder.jp)直接按题意模拟即可。 B - Caesar Cipher (atcoder.jp)按题意模拟即可 C - Graph Isomorphism (atcoder.jp)按题意模拟即可 D - Weak Takahashi (atcoder.jp) 一个非常套路的网格dp E - Rook Path (atcoder.jp) &#xff08;1&#xff09;题意 有…...

计算机网络(第8版)-第5章 运输层

5.1 运输层协议概述 5.1.1 进程之间的通信 图5-1 中两个运输层之间有一个深色双向粗箭头&#xff0c;写明“运输层提供应用进程间的逻辑通信”。 图5-1 运输层为相互通信的应用进程提供了逻辑通信 5.1.2 运输层的两个主要协议 5.1.3 运输层的端口 请注意&#xff0c;这种…...

AtCoder Beginner Contest 231(D-F,H)

D - Neighbors (atcoder.jp) &#xff08;1&#xff09;题意 给出M组关系&#xff0c;问是否有一个排列&#xff0c;能表示A[i]和B[i]相邻 &#xff08;2&#xff09;思路 考虑如果有环&#xff0c;显然不能满足排列&#xff0c;因为排列中度数最多为2&#xff0c;若有超过2的显…...

【Python】map

map()函数是Python内置函数之一&#xff0c;它的主要作用是将一个函数应用于可迭代对象中的每个元素&#xff0c;并返回一个包含结果的迭代器。 map()函数的语法如下&#xff1a; map(function, iterable)function参数是一个函数&#xff0c;表示要应用于可迭代对象每个元素的…...

Swift 5.9 与 SwiftUI 5.0 中新 Observation 框架应用之深入浅出

0. 概览 Swift 5.9 一声炮响为我们带来全新的宏&#xff08;Macro&#xff09;机制&#xff0c;也同时带来了干霄凌云的 Observation 框架。 Observation 框架可以增强通用场景下的使用&#xff0c;也可以搭配 SwiftUI 5.0 而获得双剑合璧的更强威力。 在本篇博文&#xff0c…...

【已解决】在 Vite 项目中使用 eslint-config-ali 时遇到的解析错误

错误还原 搭建 Vite 项目 pnpm create vite my-vue-app --template vue-ts安装 eslint-config-ali pnpm i -D eslint-config-ali typescript-eslint/parser typescript-eslint/eslint-plugin eslint-plugin-import eslint-import-resolver-typescript vue-eslint-parser esl…...

蓝桥杯每日一题2023.10.5

3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…...

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…...

Arcgis提取玉米种植地分布,并以此为掩膜提取遥感影像

Arcgis提取玉米种植地分布上&#xff0c;并以此为掩膜提取遥感影像 一、问题描述 因为之前反演是整个研究区&#xff0c;然而土地利用类型有很多类&#xff0c;只在农田或者植被上进行反演&#xff0c;需要去除水体、建筑等其他类型&#xff0c;如何处理得到下图中只有耕地类…...

软件工程与计算总结(四)项目管理基础

目录 一.项目和项目管理 二.团队组织与管理 三.软件质量保障 四.软件配置管理 五.项目实践 一.项目和项目管理 1.软件开发远不是纯粹的编程&#xff0c;随着软件规模的增长&#xff0c;软件开发活动也变得越来越复杂~ 2.软件项目就是要将所有的软件开发活动组织起来&#…...

【Python】datetime 库

# timedelta(days, seconds, microseconds,milliseconds, minutes, hours, weeks) 默认按顺序传递参数 # 主要介绍 datetime.datetime 类 # 引入 from datetime import datetime today datetime.now() # 获取当前时间 2023-10-05 15:58:03.218651 today1 datetime.utcnow() #…...

从0开始python学习-28.selenium 需要图片验证的登录

url https://test.com/login driver.get(url) # 获取登录页面需要输入账号密码进行模拟登录操作 user driver.find_element(By.XPATH,//*[id"login"]/div[2]/div/form[2]/div[2]/div/div/input).send_keys(username) pwd driver.find_element(By.XPATH,//*[id&qu…...

Nginx搭建Rtmp流媒体服务,并使用Ffmpeg推流

文章目录 1.rtmp流媒体服务框架图2.nginx配置3.配置nginx4.使用ffmpeg推流5.实时推摄像头流 本项目在开发板上使用nginx搭建流媒体服务&#xff0c;利用ffmpeg进行推流&#xff0c;在pc上使用vlc media进行拉流播放。 1.rtmp流媒体服务框架图 2.nginx配置 下载&#xff1a;wge…...

IDEA 将一个普通Java工程转化为maven工程

打开IntelliJ IDEA并打开Java工程。 在项目窗口中&#xff0c;右键单击项目名称&#xff0c;选择“Add Framework Support”。 在弹出的窗口中&#xff0c;选择“Maven”。 在“Maven Information”窗口中&#xff0c;填写Group Id、Artifact Id和Version等基本信息。 点击…...

linux下的永久保存行号

linux下的永久保存行号 1.首先 这里是引用 输入命令&#xff1a;vi ~/.vimrc 其次 这里是引用 输入命令 set number...

92岁高龄的创始人张忠谋谈台积电发展史

一、张忠谋和台积电 在台北一间办公室里&#xff0c;张忠谋最近拿出一本印有彩色图案的旧书。它的标题是《VLSI 系统导论》&#xff0c;这是一本研究生水平的教科书&#xff0c;描述了计算机芯片设计的复杂性。92岁的张先生满怀敬意地举起它。 92岁高龄的台积电创始人张忠谋 “…...

【VIM】VIm初步使用

玩转Vim-从放弃到入门_哔哩哔哩_bilibili...

教育类《中学政史地》收稿方向-投稿邮箱

教育类《中学政史地》收稿方向-投稿邮箱 《中学政史地》收稿方向&#xff1a;中学政治、历史、地理类稿件 《中学政史地》创办于1987年&#xff0c;是我国唯一一份集中学政治、历史、地理三门学科为一体的综合性月刊。每月两期&#xff0c;分初中版和高中版。以服务学生、服务…...

数据库的备份与恢复

数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 数据库备份…...

string类的模拟实现(万字讲解超详细)

目录 前言 1.命名空间的使用 2.string的成员变量 3.构造函数 4.析构函数 5.拷贝构造 5.1 swap交换函数的实现 6.赋值运算符重载 7.迭代器部分 8.数据容量控制 8.1 size和capacity 8.2 empty 9.数据修改部分 9.1 push_back 9.2 append添加字符串 9.3 运算符重载…...

C 函数指针

就像指针可以指向一般变量、数组、结构体那样&#xff0c;指针也可以指向函数。 函数指针的主要用途是向其他函数传递“回调”&#xff0c;或者模拟类和对象。 形式如下&#xff1a; int (*POINTER_NAME)(int a, int b) 这类似于指向数组的指针可以表示所指向的数组。指向函数…...

zkVM设计性能分析

1. 引言 本文主要参考&#xff1a; 2023年9月ZKSummit10 Wei Dai 1k(x) & Terry Chung 1k(x)分享视频 ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung 当前有各种zkVM&#xff0c;其设计思想各有不同&#xff0c;且各有取舍&#xff0c;本文重点对现有各z…...

调用gethostbyname实现域名解析(附源码)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…...

面向无线传感器网络WSN的增强型MODLEACH设计与仿真(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

前端页面初步开发

<template><div><el-card class"box-card" style"height: 620px"><el-input v-model"query.name" style"width:200px" placeholder"请输入用户姓名"></el-input>&nbsp&nbsp&nbsp…...

【赠书活动第3期】《构建新型网络形态下的网络空间安全体系》——用“价值”的视角来看安全

目录 一、内容简介二、读者受众三、图书目录四、编辑推荐五、获奖名单 一、内容简介 经过30多年的发展&#xff0c;安全已经深入到信息化的方方面面&#xff0c;形成了一个庞大的产业和复杂的理论、技术和产品体系。 因此&#xff0c;需要站在网络空间的高度看待安全与网络的…...

基于SpringBoot的智能推荐的卫生健康系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 科室类型管理 医生信息管理 健康论坛管理 我的发布 我的收藏 在线咨询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在…...

几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)

作为一名软件开发人员&#xff0c;你一定也是经常接触到开源软件&#xff0c;但你真的就了解这些开源软件使用的开源许可协议吗&#xff1f; 你不会真的认为&#xff0c;开源就是完全免费吧&#xff1f;那么让我们通过本文来寻找答案。 一、开源许可协议简述 开源许可协议是指开…...

通过usb串口发送接收数据

USB通信使用系统api&#xff0c;USB转串口通信使用第三方库usb-serial-for-android&#xff0c; 串口通信使用Google官方库android-serialport-api。x 引入包后在本地下载的位置&#xff1a;C:\Users\Administrator\.gradle\caches\modules-2\files-2.1 在 Android 中&#x…...

Python3数据科学包系列(三):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 国庆中秋宅家自省: Pyth…...

西宁网站建设模板/seo技术培训海南

这次主要说一下系统服务启动相关命令某些服务在开机的时候启动能不能执行跟你的/etc/rc.d/init.d 里头的服务设定项目有关ntsysv       < 目前的run-level 下的设定修改启动项ntsysv --level 5  < 不同run-level 下的设定修改启动项这些要注意一下运行的级别ser…...

wordpress 锚文点/贺贵江seo教程

题意&#xff1a;丑数就是质因子只有2&#xff0c;3&#xff0c;5 &#xff0c;7&#xff0c;的数&#xff0c;另外1也是丑数。求第n(1<n<5842)个丑数&#xff0c;n0&#xff0c;结束。 思路&#xff1a;根据丑数的定义&#xff0c;丑数应该是另一个丑数乘以2、3、5或者7…...

wordpress网站布局/新手怎么推广自己的店铺

MariaDB数据库 数据库介绍 MySQL与MariaDB 数据库部署1.安装MariaDB数据库2.重启mariadb服务并加入开机启动项3.!数据库初始化4.设置防火墙策略5.登录数据库 数据库常用语句 创建数据库 查询指定位置数据 数据库备份 彻底删除数据库 恢复数据 数据库介绍 数据库&#xff1a;是…...

用Axure做的原型网站百度云/单页网站

开发中我们经常会需要交换两个值&#xff0c;常见有几种方式&#xff1a; 备注&#xff1a;交换前可以先判断两个数是否相等&#xff0c;相等的话就可以跳过交换过程了。 方式一&#xff1a; int a 3; int b 4; // swap int temp a; a b; b temp; 这种方式是最直接也是…...

用ftp改网站电话怎么内页底部的没有变/品牌推广与传播

作者崇尚简约、见解独到、看法新颖、内容有点另类&#xff0c;却总让我产生共鸣&#xff0c;从中受到不少启发&#xff0c;看起来真是过瘾。原来书还可以这样写。有些可能不知不觉加上了我自己的观点&#xff0c;同一句话不同的人有不同的理解&#xff0c;可能会出现断章取义的…...

做网站需要哪些人才/网站优化seo

原文链接;:点击打开链接 拷贝黏贴下 七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案&#xff0c;很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣。 结合七牛实时流网络 LiveNet 和直播云解决方案的实践&#xff0c;我们用八篇…...