AtCoder ABC194

这期比193稍微简单一点

C - Squared Error

手玩一下:
N = 3 N=3 N=3
展开得
a 2 + b 2 − 2 a b + b 2 − c 2 − 2 b c + a 2 + c 2 − 2 a c a^2+b^2-2ab+b^2-c^2-2bc+a^2+c^2-2ac a2+b22ab+b2c22bc+a2+c22ac
每个数平方项都要计算 n − 1 n-1 n1
减的那一份可以按枚举一个数来算,发现剩下的项是前缀和

# -*- coding: utf-8 -*-
# @time     : 2023/6/2 13:30
# @file     : atcoder.py
# @software : PyCharmimport bisect
import copy
import sys
from itertools import permutations
from sortedcontainers import SortedList
from collections import defaultdict, Counter, deque
from functools import lru_cache, cmp_to_key
import heapq
import math
sys.setrecursionlimit(100010)def main():items = sys.version.split()fp = open("in.txt") if items[0] == "3.10.6" else sys.stdinn = int(fp.readline())a = list(map(int, fp.readline().split()))ans = 0for i in range(n):ans += a[i] * a[i] * (n - 1)s = 0for i in range(n):ans -= s * a[i] * 2s += a[i]print(ans)if __name__ == "__main__":main()

D - Journey

纯正的数学题
在这里插入图片描述

三个性质:
1.取什么数是无关的,答案只与当前有几个数相关
2.类似马尔科夫随机过程,有自环
每个过程的期望独立,总期望=每个过程的期望之和
3.如图上,点i有 p = ( n − 1 ) / n p=(n-1)/n p=(n1)/n的概率用1步到下一个点i+1
期望步数= 1 / p 1/p 1/p
证明:设期望= E X EX EX
E X = ( 1 − p ) ( E X + 1 ) + p ( 1 ) EX=(1-p)(EX+1)+p(1) EX=(1p)(EX+1)+p(1)
得证

# -*- coding: utf-8 -*-
# @time     : 2023/6/2 13:30
# @file     : atcoder.py
# @software : PyCharmimport bisect
import copy
import sys
from itertools import permutations
from sortedcontainers import SortedList
from collections import defaultdict, Counter, deque
from functools import lru_cache, cmp_to_key
import heapq
import math
sys.setrecursionlimit(100010)def main():items = sys.version.split()fp = open("in.txt") if items[0] == "3.10.6" else sys.stdinn = int(fp.readline())ans = 0for i in range(1, n):ans += n / iprint(ans)if __name__ == "__main__":main()

E - Mex Min

在一个10^6的范围内求是否有数,第一眼的感觉是BIT
但本题不是求是否有数,而是求第一个没有数的位置,可以二分计数count(x)=x
用BIT维护是否有数的数组
要注意一些trick的地方,比如出滑动窗口的数和入窗口的数是同一个数

#include <cstring>
#include <climits>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef vector<int> vi;int n, m;
int a[1500005];
int c[1500005];
int cnt[1500005];int inline lowbit(int x) {return x & -x;
}void add(int x, int val) {while (x <= n) {c[x] += val;x += lowbit(x);}
}int get(int x) {int ret = 0;while(x > 0) {ret += c[x];x -= lowbit(x);}return ret;
}bool check(int x) {return get(x) == x;
}int main() {//freopen("in.txt", "r", stdin);scanf("%d%d", &n, &m);for(int i = 0; i < n; ++ i) {scanf("%d", &a[i]);a[i] ++;}for (int i = 0; i < m; ++ i) {cnt[a[i]] += 1;}for (int i = 1; i <= n; ++ i) {if(cnt[i]) add(i, 1);}int ans = n;for(int i = 0; i + m - 1 < n; ++ i) {int lo = 1, hi = n + 1;while(lo < hi) {int mi = (lo + hi) / 2;bool r = check(mi);if (r) lo = mi + 1;else hi = mi;}ans = min(ans, lo - 1);// printf("%d\n", ans);int j = i + m;if (i + m >= n) break;cnt[a[i]] --;cnt[a[j]] ++;if (a[i] != a[j]) {if (cnt[a[i]] == 0) add(a[i], -1);if (cnt[a[j]] == 1) add(a[j], 1);}}printf("%d\n", ans);return 0;
}

F - Digits Paradise in Hexadecimal

在1…N中寻找满足某种条件的数个数,是一个典型的数位dp题。

搜索的时候用bitmask表示搜索状态,但搜索到哪几个数字并不重要,只需要记录搜索到数字的个数即可,这是本题的技巧。

写了一个记忆化搜索,优化一下应该更快。
设dp[pos][c][cap][lead]
pos 当前要搜索的位置
c 当前状态(开始搜索前)不同数的个数
cap 当前搜索前是否抵达上界
lead 当前搜索前是否有非零数
答案为dp[0][0][1][0]

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <string>
#include <cstring>
#include <climits>
#include <cstdlib>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <unordered_map>
#include <algorithm>
#define LT(x) (x * 2)
#define RT(x) (x * 2 + 1)using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;char s[200020];
int a[200020];
int k, n;
ll mod = (ll)(1e9 + 7);
ll dp[200020][17][2][2];
int mem[1 << 17];int pop_count(int x) {if (x == 0) return 0;if (mem[x]) return mem[x];int ret = 0;while (x) {x -= x & -x;ret++;}return mem[x] = ret;
}ll get(int pos, int st, int cap, int lead) {int c = pop_count(st);if (c > k) return 0;if (pos == n) {return c == k && lead;}if (dp[pos][c][cap][lead] != -1) return dp[pos][c][cap][lead];int m = cap ? a[pos]: 15;ll ret = 0;for (int d = 0; d <= m; ++d) {int ncap = cap;if (d < m) ncap = 0;int nst = st;if (lead == 0 && d == 0)nst = st;elsenst = st | (1 << d);int nlead = lead;if (d) nlead = 1;ret += get(pos + 1, nst, ncap, nlead);ret %= mod;}//printf("%d %d %d %d %lld\n", pos, c, cap, lead, ret);return dp[pos][c][cap][lead] = ret;
}int main() {//freopen("in.txt", "r", stdin);scanf("%s", s);scanf("%d", &k);n = strlen(s);for (int i = 0; i < n; ++i) {if (s[i] >= '0' && s[i] <= '9') {a[i] = s[i] - '0';}else {a[i] = s[i] - 'A' + 10;}}memset(dp, 0xff, sizeof(dp));ll ans = get(0, 0, 1, 0);printf("%lld\n", ans);return 0;
}

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

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

相关文章

使用metricbeat 监控多ES集群

背景 ES 本身自带 监控&#xff0c;属于xpack 中的内容&#xff0c;为商业版&#xff0c;需要收费&#xff1b; 并且 monitor 功能必须要在security开启后才能使用&#xff0c;还有就是集群监控自己&#xff0c;将采集到的性能数据保存到本集群&#xff0c;这是一个比较差的设…

oracle添加序号列大全(3种方法)

场景&#xff1a;oracle在展示数据时&#xff0c;用户需要看到当前记录数&#xff0c;添加序号即可&#xff0c;适用于表格导出。 方式一&#xff1a;添加xh字段 SELECTfxh,fmc,round( ( sum( fczsrbnljzxs ) - sum( fczsrsntqs ) ) / 10000, 2 ) AS 增减额,round( sum( fczsr…

Python爬虫---Scrapy项目的创建及运行

Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 可以应用在包括数据挖 掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 1. 安装scrapy&#xff1a; pip install scrapy 注意&#xff1a;需要安装在python解释器相同的位置,例如&#xf…

Linux调试器gdb简介

目录 前言&#xff1a; debug VS realse GDB的基本操作 行号显示 设置断点 ​编辑 查看断点信息 删除断点 禁用断点 开启断点 运行 逐过程 逐语句 显示/追踪变量 查看调用堆栈 指定行号跳转 强制执行函数 断点间跳转 修改变量的值 前言&#xff1a; GDB&…

这样管理精密空调系统,比一般方法好用百倍!

在现代社会&#xff0c;随着科技的飞速发展&#xff0c;人们对于舒适、安全、高效的空间环境需求不断增加。在这个背景下&#xff0c;精密空调监控系统作为一种前沿的技术解决方案&#xff0c;正逐渐成为各行各业关注的焦点。 精密空调监控系统不仅仅是对传统空调系统的升级&am…

使用ros_arduino_bridge控制机器人底盘

使用ros_arduino_bridge控制机器人底盘 搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano&#xff0c;就可以在PC端通过键盘控制小车的运动了。实现流程如下&#xff1a; 系统准备&#xff1b;下载程序&#xff1b;程序修改&#xff1b;分别启动PC与Jetson…

查看navicat链接密码

导出链接,带密码导出 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/239bcf0ad22d4de98524fa4d7db4a30d.png 查看密码 这个是navicat加密后的密码&#xff0c;需要解密 使用一段代码解密 这个是php代码&#xff0c;没有本地php环境&#xff0c;可以看在线…

UV胶水与聚氯乙烯PVC材料的塑料粘接,效果如何?

UV胶水可以与聚氯乙烯PVC很好地粘接。 PVC是一种常见的塑料材料&#xff0c;UV胶水通常对PVC具有良好的粘接性能。UV胶水可以在紫外线照射下迅速固化&#xff0c;形成坚固的粘接&#xff0c;因此通常被用于PVC制品的粘接和修复。 UV胶水与PVC粘接的优点&#xff1a; 1. 快速固…

Hello,World!

“Hello, world”的由来可以追溯到 The C Programming Language 。在这门编程语言中&#xff0c;它被用作第一个演示程序&#xff0c;向人们展示了在计算机屏幕上输出“Hello world”这行字符串的计算机程序。由于这个演示程序的简洁性和直观性&#xff0c;它成为了许多初学者学…

算法训练营第四十二天|动态规划:01背包理论基础 416. 分割等和子集

目录 动态规划&#xff1a;01背包理论基础416. 分割等和子集 动态规划&#xff1a;01背包理论基础 文章链接&#xff1a;代码随想录 题目链接&#xff1a;卡码网&#xff1a;46. 携带研究材料 01背包问题 二维数组解法&#xff1a; #include <bits/stdc.h> using namesp…

【simple-admin】FMS模块如何快速接入阿里云oss 腾讯云cos 服务 实现快速上传文件功能落地

让我们一起支持群主维护simple-admin 社群吧!!! 不能加入星球的朋友记得来点个Star!! https://github.com/suyuan32/simple-admin-core 一、前提准备 1、goctls版本 goctls官方git:https://github.com/suyuan32/goctls 确保 goctls是最新版本 v1.6.19 goctls -v goct…

免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件

话不多说&#xff0c;直接上图上链接&#xff1a;https://rivers.chaitin.cn/?share3d4f2e8aaec211eea5550242c0a8170c 还是比较好用的&#xff0c;支持 PHP、JSP 文件 webshell 检测&#xff0c;看官方解释文档&#xff0c;引擎使用静态文本特征、骨架哈希、静态语义分析、动…