Codeforces Round 925 (Div. 3)

A. Recovering a Small String(枚举)

在这里插入图片描述

思路

每次枚举每一位

#include <iostream>
using namespace std;int main() {int t;cin >> t;for (int i = 0; i < t; i++) {int n;cin >> n;if(n <= 28){cout<<"aa"<<char(n - 3 + 'a')<<endl;}else if(n <= 53){cout<<'a'<<char(n - 1 - 27 + 'a')<<'z'<<endl;}else{cout<<char(n - 1 - 52 + 'a')<<"zz"<<endl;}}return 0;
}

B. Make Equal(模拟)

在这里插入图片描述

思路

每个容器先减去平均值,然后从前到后累加,如果值小于0了,那么就说明不可能

#include<iostream>
using namespace std;
int t, n;
int a[200005];int main(){scanf("%d", &t);while(t--){scanf("%d", &n);int sum = 0;for(int i = 1; i <= n; i++){scanf("%d", &a[i]);sum += a[i];}sum /= n;for(int i = 1; i <= n; i++){a[i] -= sum;}int res = 0, f = 1;for(int i = 1; i <= n; i++){if(a[i] >= 0) res += a[i];else{res += a[i];if(res < 0){f = 0;break;}}}if(f) printf("YES\n");else printf("NO\n");}return 0;
}

C. Make Equal Again(贪心)

在这里插入图片描述

思路

因为不超过1次,那么判断如果左端不等于右端,那就取最大值那端,否则都取

#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int a[N], n, t;int main() {cin >> t;while (t--) {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}int l = 1;for(int i = 2; i <= n; i++){if(a[i] == a[l]) l++;else break;}int r = n;for(int i = n - 1; i > 0; i--){if(a[i] == a[r]) r--;else break;}if(l >= r){cout<<0<<endl;continue;}r = n - r + 1;long long ans;if(a[1] == a[n]) ans = n - l - r;else ans = n - max(l, r);cout<<ans<<endl;}return 0;
}

D. Divisible Pairs(同余)

在这里插入图片描述

思路

(ai + aj) % x 同余 0, (ai - aj) % y 同余 0,简写成 ai + aj ≡ 0(mod x)
移项得:aj ≡ -ai(mod x), aj ≡ ai(mod y)
即:ai % x, ai % y 找 -ai % x, ai % y

#include<iostream>
#include<map>
using namespace std;
const int N = 2e5 + 10;
int n, a[N];int main(){int t, x, y;scanf("%d", &t);while(t--){// 统计每对元组的数量 map<pair<int, int>, int> mp;scanf("%d%d%d", &n, &x, &y);for(int i = 0; i < n; i++){scanf("%d", &a[i]);mp[make_pair(a[i] % x, a[i] % y)]++;}long long ans = 0;for(int i = 0; i < n; i++){mp[make_pair(a[i] % x, a[i] % y)]--;// (x - a[i] % x)转化成一个正数,再 % x,防止出现负数 ans += mp[make_pair((x - a[i] % x) % x, a[i] % y)];}printf("%lld\n", ans);}return 0;
}

E. Anna and the Valentine’s Day Gift(贪心)

在这里插入图片描述

思路

整数大于等于 10 ^ m -> 整数是 m + 1 位,男合并,女翻转
女想赢,那么会把 111000 翻转成 000111
男想赢,那么会合并 1100 111 成 1100111
按末尾 0 的长度降序排序,该谁操作,就谁取最优
用优先队列存储,大根堆

#include<iostream>
#include<queue>
using namespace std;
const int N = 2e5 + 10;
int n;int main(){int t, m, x;scanf("%d", &t);while(t--){// 统计后缀 0 的个数和当前数的位数,大根堆 priority_queue<pair<int, int>> q;scanf("%d%d", &n, &m);for(int i = 0; i < n; i++){int z = 0, w = 0, cnt = 0, len = 0;scanf("%d", &x);z = x;while(z % 10 == 0){cnt++;z /= 10;}w = x;while(w){len++;w /= 10;}q.push(make_pair(cnt, len));}//判断是谁的回合,0 是 Anna,1 是 Sasha int f = 0, sa = 0;while(q.size()){auto it = q.top();// Sasha 操作,合并 if(f) sa += it.second;// Anna 操作,消除 0 else sa += it.second - it.first;f ^= 1;q.pop();}if(sa >= m + 1) printf("Sasha\n");else printf("Anna\n");}return 0;
}

F. Chat Screenshots(拓扑排序)

在这里插入图片描述

思路

如果每个点的入度都为 0 了,那就说明序列正确了,否则是有环
记得判重,每次数组初始化为 memset(h, -1, sizeof(int) * (n * k + 1));

#include<iostream>
#include<cstring>
using namespace std;
const int N = 2e5 + 10;
int h[N], e[N], ne[N], idx;
int q[N], hh, tt = -1;
int n, k, x, y;
int d[N], st[N];
int t;void solve(){scanf("%d%d", &n, &k);int zz = n * k + 1;memset(h, -1, sizeof(int) * zz);memset(e, 0, sizeof(int) * zz);memset(ne, 0, sizeof(int) * zz);idx = 0;memset(q, 0, sizeof(int) * zz);hh = 0, tt = -1;memset(d, 0, sizeof(int) * zz);memset(st, 0, sizeof(int) * zz);for(int i = 1; i <= k; i++){scanf("%d", &x);for(int j = 2; j <= n; j++){scanf("%d", &y);if(j != 2){//判重int f = 1;for(int ii = h[x]; ii != -1; ii = ne[ii]){int j = e[ii];if(j == y){f = 0;}}//添加一条 x -> y 的边if(f){e[idx] = y;ne[idx] = h[x];h[x] = idx++;d[y]++;			        }}x = y;}}//for(int i = 1; i <= n; i++) cout<<d[i]<<endl;for(int i = 1; i <= n; i++){if(!d[i]){q[++tt] = i;st[i] = 1;} }//cout<<"----------"<<endl;while(hh <= tt){int it = q[hh++];//cout<<it<<" ";for(int i = h[it]; i != -1; i = ne[i]){int j = e[i];if(!st[j]){d[j]--;if(!d[j]) q[++tt] = j;}}}for(int i = 1; i <= n; i++){//cout<<d[i]<<endl;if(d[i] > 0){printf("NO\n");return;}}printf("YES\n");
}int main(){scanf("%d", &t);while(t--){solve();}return 0;
}

G. One-Dimensional Puzzle(排列组合)

在这里插入图片描述

思路

在 1、2 之间插入 3、4 有多少种方法
在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
const int p = 998244353;int qm(int a, int b){int res = 1 % p;while(b){if(b & 1) res = (long long)res * a % p;a = (long long)a * a % p;b >>= 1;}return res;
}int C(int a, int b){int res = 1;for(int i = 1, j = a; i <= b; i++, j--){res = (long long)res * j % p;res = (long long)res * qm(i, p - 2) % p;}return res;
}int lucas(long long a, long long b){if(a < p && b < p) return C(a, b);return (long long)C(a % p, b % p) * lucas(a / p, b / p) % p;
}signed main(){int n;long long a, b, c, d;cin>>n;while(n--){cin>>a>>b>>c>>d;long long ans = 0; // 初始化 ansif(a == 0 && b == 0){if(c > 0 && d > 0){printf("0\n");}else{printf("1\n");}}else if(a - b == 1){ans = (long long)lucas(a + c - 1, c) * lucas(a + d - 1, d) % p; // 添加取模操作printf("%lld\n", ans);}else if(b - a == 1){ans = (long long)lucas(b + c - 1, c) * lucas(b + d - 1, d) % p; // 添加取模操作printf("%lld\n", ans);}else if(a == b){ans = ((long long)lucas(a + c - 1, c) * lucas(a + d, d) % p + (long long)lucas(a + c, c) * lucas(a + d - 1, d) % p) % p; // 添加取模操作printf("%lld\n", ans);}else{printf("0\n");}}return 0;
}

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

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

相关文章

Rust 数据结构与算法:3栈:用栈实现符号匹配

1、符号匹配 如: (5+6)(7+8)/(4+3)、{ { ( [ ] [ ])}}、(a+b)(c*d)func() 等各类语句的符号匹配。 这里我们关注的不是数字而是括号,因为括号更改了操作优先级,限定了语言的语义,这是非常重要的。如果括号不完整,那么整个表达式就是错的。 括号都必须以成对匹配的形式出…

「数据结构」MapSet

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; Map&Set &#x1f349;概念&#x1f349;模型&#x1f349;Map&#x1f34c;TreeMap和HashMap的区别&#x1f34c;Map常用方…

LeetCode.107. 二叉树的层序遍历 II

题目 107. 二叉树的层序遍历 II 分析 这个题目考查的是二叉树的层序遍历&#xff0c;对于二叉树的层序遍历&#xff0c;我们需要借助 队列 这种数据结构。再来回归本题 &#xff0c;我们只需要将 二叉树的层序遍历的结果逆序&#xff0c;就可以得到这道题我们要求的答案了。…

引用的账户当前已锁定,且可能无法登录怎么办

WINDOWS提示引用账户已锁定怎么办&#xff08;补充&#xff09; 一般是多次输错密码的原因&#xff01;等待半个小时就能打开了&#xff01; 这跟手机锁屏被小朋友锁死原理类似&#xff0c;但是Windows不会给你显示具体时间&#xff0c;所以你登录BIOS改系统时间&#xff0c;欺…

102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&…

模型 人货场

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。重在提升认知。连接消费者与商品的桥梁。 1 ”人货场“模型的应用 1.1 以抖音直播电商为背景的人货场应用-小杨哥的带货奇迹 小杨哥&#xff0c;一位知名的抖音主播&#xff0c;以其幽默风趣的直播风…

从零开始学howtoheap:解题西湖论剑Storm_note

how2heap是由shellphish团队制作的堆利用教程&#xff0c;介绍了多种堆利用技术&#xff0c;后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;优化pwn虚拟机配置支持libc等指…

AJAX——HTTP协议

1 HTTP协议-请求报文 HTTP协议&#xff1a;规定了浏览器发送及服务器返回内容的格式 请求报文&#xff1a;浏览器按照HTTP协议要求的格式&#xff0c;发送给服务器的内容 1.1 请求报文的格式 请求报文的组成部分有&#xff1a; 请求行&#xff1a;请求方法&#xff0c;URL…

算法-16-并查集

并查集简介 并查集&#xff1a;一开始&#xff0c;把a&#xff0c;b&#xff0c;c放入并查集&#xff0c;a自己一个集合&#xff0c;b自己一个&#xff0c;c自己一个 提供的方法 1.boolean isSameSet(a,b)&#xff0c;判断ab是否在同一个集合 2.void union(a,b),把a所…

【Midjourney】解密Midjourney付费订阅:畅享全新体验!(详细流程与各版本一览)

一、Midjourney 付费订阅流程 1、在首页点击Purchase plan 2、进入到midjourney年月选择页面 3、这里续费一个最便宜的版本 , 按年付费 8 , 按月 10 4、输入银行卡信息 , 用的WildCard虚拟信用卡 &#xff0c;打开 5、填写完银行卡信息就订阅成功 二、Midjourney 各版本介绍…

彻底改变单词嵌入和文本分类

目录 一、介绍二、起源与发展三、技术基础四、FastText 的优点五、代码六、结论 一、介绍 2016 年由 Facebook 的 AI Research &#xff08;FAIR&#xff09; 团队推出的 FastText 已迅速成为自然语言处理 &#xff08;NLP&#xff09; 领域的基石。这种创新的词嵌入和文本分类…

算法——数论——快速幂

目录 快速幂 费马小定理 一、试题 算法训练 A的B的C次方次方 快速幂 快速幂是一种用于快速计算幂运算的算法。计算复杂度 O(log n)基本思想是利用指数 n 的二进制展开形式&#xff0c;将 转化为多个 a 的幂的乘积&#xff0c;然后通过迭代快速计算。 快速幂的示例代码&…