Codeforces Round 950 (Div. 3)(A~F2)

G题只会暴力..不会数据结构

A - 问题 Generator 

暴力模拟即可

// Problem: A. Problem Generator
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
void solve() 
{int a[7];int n , m;cin >> n >> m;for(int i = 0 ; i < 7 ; i ++){a[i] = m;}	string s;cin >> s;for(auto c : s){a[c - 'A']--;}int cnt = 0 ;for(int i = 0 ; i < 7 ;i ++){cnt += max(0 , (a[i]));}cout << cnt << endl;
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

B - Choosing Cubes  

        题意:

        还是暴力模拟,记录一下最喜欢立方体在排序后的左右界,然后搞一搞

// Problem: B. Choosing Cubes
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
bool cmp(int a  , int b){return a > b;
}
void solve() 
{int n , f , k;cin >> n >> f >> k;for(int i = 1 ; i <= n ; i ++)cin >> a[i];int tar = a[f];sort(a.begin() + 1 , a.begin() + 1 + n , cmp);int l = -1 , r;for(int i = 1 ; i <= n ; i ++){if(a[i] == tar){if(l == -1){l = i;}r = i;}}if(l > k){cout <<"No\n";}else if(r <= k){cout <<"Yes\n";}else{cout <<"Maybe\n";}
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

C - Sofia and the Lost Operations  

        题意:

        思路:若最后一个修改数存在于b数组中,那么只需要看这些修改的数能否把a数组中待修改的数全部覆盖即可,否则一定不存在。

        

// Problem: C. Sofia and the Lost Operations
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define int long long
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
void solve() 
{int n;cin >> n;int a[n] , b[n];for(int i = 0 ; i < n ; i ++)cin >> a[i];for(int i = 0 ; i < n ; i ++)cin >> b[i];set<int>st;map<int , int>mp;for(int i = 0 ; i < n ; i ++)st.insert(b[i]);for(int i = 0 ; i < n ; i ++){if(a[i] != b[i]){mp[b[i]]++;}}int m;cin >> m;vector<int>tmp;for(int i = 0 ; i < m ; i ++){int x;cin >> x;tmp.pb(x);}if(st.count(tmp[tmp.size() - 1])){for(auto it : tmp){mp[it]--;}int ok = 1;for(auto it : mp){if(it.second > 0){ok = 0;}}if(ok)cout <<"YES\n";elsecout <<"NO\n";}else{cout <<"NO\n";}
}            
signed main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

D - GCD-sequence  

        题意:

        思路:将删除前的gcd序列求出来,可以发现若要满足题意,必然需要找到gcd序列中最后一个递减的位置,并且删除与之相关的数(只有三个数与之相关)。然后判断删除后的序列能否形成非递减即可。

        

// Problem: D. GCD-sequence
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
void solve() 
{int n;cin >> n;for(int i = 0 ; i < n ; i ++){cin >> a[i];}	vector<int>b;for(int i = 1 ; i < n ; i ++){b.pb(__gcd(a[i] , a[i - 1]));}int f1 = -1, f2 = -1 , f3 = -1;for(int i = b.size() - 1 ; i >= 1 ; i --){if(b[i - 1] > b[i]){f1 = i + 1;f2 = i;f3 = i - 1;break;}}if(f1 == -1){cout << "YES\n";return;}else{vector<int>tmp;vector<int>tmpb;for(int i = 0 ; i < n ; i ++){if(i == f1) continue;tmp.pb(a[i]);}for(int i = 1 ; i < n - 1; i ++){tmpb.pb(__gcd(tmp[i] , tmp[i - 1]));}		int ok = 1;for(int i = 1 ; i < n - 2 ; i ++){if(tmpb[i] >= tmpb[i - 1]) continue;else ok = 0;}if(ok){cout <<"YES\n";return;}tmp.clear();tmpb.clear();for(int i = 0 ; i < n ; i ++){if(i == f2) continue;tmp.pb(a[i]);}for(int i = 1 ; i < n - 1; i ++){tmpb.pb(__gcd(tmp[i] , tmp[i - 1]));}		ok = 1;for(int i = 1 ; i < n - 2 ; i ++){if(tmpb[i] >= tmpb[i - 1]) continue;else ok = 0;}if(ok){cout <<"YES\n";return;}tmp.clear();tmpb.clear();for(int i = 0 ; i < n ; i ++){if(i == f3) continue;tmp.pb(a[i]);}for(int i = 1 ; i < n - 1; i ++){tmpb.pb(__gcd(tmp[i] , tmp[i - 1]));}		ok = 1;for(int i = 1 ; i < n - 2 ; i ++){if(tmpb[i] >= tmpb[i - 1]) continue;else ok = 0;}if(ok){cout <<"YES\n";return;}}cout <<"NO\n";
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

E - Permutation of Rows and Columns  

        题意:给定两个矩阵,每个格子中有一个唯一的数。求这两个矩阵能否通过行变换,列变换变成相同的矩阵。

        思路:可以发现无论怎么变换,一行/一列中的数的情况是一样的,因此只需要看两个矩阵每一行/每一列中的数是否匹配即可。

        

// Problem: E. Permutation of Rows and Columns
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/E
// Memory Limit: 256 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
void solve() 
{int n , m;cin >> n >> m;int a[n][m];for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++)cin >> a[i][j];}	int b[n][m];for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++)cin >> b[i][j];}		map< set<int> , int> mp;map< set<int> , int> pm;	for(int i = 0 ; i < n ; i ++){set<int>tmp;for(int j = 0 ; j < m ; j ++){tmp.insert(a[i][j]);}mp[tmp]++;}for(int i = 0 ; i < m ; i ++){set<int>tmp;for(int j = 0 ; j < n ; j ++){tmp.insert(a[j][i]);}pm[tmp]++;}	for(int i = 0 ; i < n ; i ++){set<int>tmp;for(int j = 0 ; j < m ; j ++){tmp.insert(b[i][j]);}if(mp.count(tmp)){continue;}else{cout <<"NO\n";return;}}for(int i = 0 ; i < m ; i ++){set<int>tmp;for(int j = 0 ; j < n ; j ++){tmp.insert(b[j][i]);}if(pm.count(tmp)){continue;}else{cout <<"NO\n";return;}}	cout <<"YES\n";
}            
int main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

F2 - Field Division (hard version) 

 

思路:(纯暴力做法)可以发现:若一个喷泉的左下方存在另一个喷泉,那么Alice就不会划线到该喷泉旁边,而是会划到左下方喷泉中最左边的那个喷泉的左侧。 因此只需要记录一下每一行左下方最左侧喷泉的位置即可,然后再计算每一行划了多少,由于矩阵很大,所以需要离散化处理。

        另外如何判断删除某喷泉后会增加多少,同样是模拟删除该喷泉后的,在其上方的喷泉的情况,然后如果跟没删除前一样就不用再模拟下去了。

        

// Problem: F1. Field Division (easy version)
// Contest: Codeforces - Codeforces Round 950 (Div. 3)
// URL: https://codeforces.com/contest/1980/problem/F1
// Memory Limit: 256 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
#define int long long
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
void solve() 
{int n , m , k;cin >> n >> m >> k;pair<int,int>p[k];for(int i = 0 ; i < k ; i ++){cin >> p[i].x >> p[i].y;}	set<int>st;for(int i = 0 ; i < k ; i ++){st.insert(p[i].x);}int idx = 0;map<int,int>mp;map<int,int>pm;for(auto it : st){mp[it] = ++idx;pm[idx] = it;}map<int , set<int> >left;for(int i = 0 ; i < k ; i ++){int idx = mp[p[i].x];left[idx].insert(p[i].y);}vector<int>pre(idx + 5 , m + 1);for(int i = idx; i >= 0 ; i --){if(i != 0)pre[i] = min(pre[i + 1] , *left[i].begin());elsepre[i] = pre[i + 1];}int ans = 0;for(int i = 0 ; i <= idx ; i ++){int l , r;if(i == 0){l = 0;}else{l = pm[i];}if(i == idx){r = n;}else{r = pm[i + 1];}ans += (pre[i + 1] - 1) * (r - l);}cout << ans << endl;for(int i = 0 ; i < k ; i ++){int idx = mp[p[i].x];if(p[i].y > *left[idx].begin()){cout << 0 << " ";}else{if(p[i].y < pre[idx + 1]){auto it = left[idx].begin();it++;int x;if(it == left[idx].end())x = pre[idx + 1];elsex = *it;int out = 0;x = min(x , pre[idx + 1]);out += (x - p[i].y) * (pm[idx] - pm[idx - 1]);for(int i = idx - 1; i >= 0 ; i --){x = min(x , *left[i].begin());if(x == pre[i]) break;out += (x - pre[i]) * (pm[i] - pm[i - 1]);			}cout << out << " ";}else{cout << 0 << " ";}}}cout << endl;
}            
signed main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

哈夫曼树的构造,哈夫曼树的存在意义--求哈夫曼编码

一:哈夫曼树的构造 ①权值,带权路径长度。 ②一组确定权值的叶子节点可以构造多个不同的二叉树,但是带权路径长度min的是哈夫曼树 ③算法基本思想及其实操图片演示 注:存储结构和伪代码 1 初始化: 构造2n-1棵只有一个根节点的二叉树,parent=rchild=lchild=-1; 其中…

谷歌创新框架:从非结构化数据,实现多模态学习

看、听、说的多模态已成为主流大模型的重要功能之一。但在数据爆炸时代&#xff0c;大模型学习文本类的结构化数据相对还好一些&#xff0c;但要去学习视频、音频、图片等非结构化数据非常困难。 目前&#xff0c;从结构化和非结构化数据实现多模态学习&#xff0c;会随着模态…

QT_UI设计

mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE //命名空间 namespace Ui { class MainWindow; } //ui_MainWindow文件里定义的类&#xff0c;外部声明 QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_O…

httprunner接口自动化测试框架使用说明【保姆级教程】

背景介绍&#xff1a; httprunner是国内开源的一个接口自动化框架&#xff0c;已经有部分公司开始使用这种框架来完成自己公司的接口自动化编写&#xff0c;本文主要是从简单的流程上去讲解咋使用的&#xff08;PS&#xff1a;开发者本尊的官网教程写的是真的烂。。。&#xf…

JVM调优实战

如果老年代能回收掉大部分&#xff0c;说明年轻代太小了&#xff0c;放不下 OOM 1数据量一次性申请的内存过多&#xff0c;比如数据库查询返回值大多&#xff0c;所以做个分页 2.并发过高的情况下&#xff0c;一些连接未释放 3.堆内存不够

DP-Kmaens密度峰值聚类算法

我有个问题 关于 [密度值>密度阈值] 的判定这里&#xff0c;新进来的新数据怎么确定他的密度值&#xff1f;密度阈值又是怎样确定的呢&#xff1f;

Vscode git 插件

超好用的git记录 软件 安装之后&#xff0c;鼠标在哪一行就可以看最新一次是谁提交的&#xff0c;真的超好用&#xff01;&#xff01;&#xff01;

43页 | 2024年企业级BI平台白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024年企业级BI平台白皮书 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 诚挚邀请您微信扫码加入以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&…

【NOI】C++程序结构入门之循环结构二-for循环

文章目录 前言一、for循环1.导入2.语法3.使用场景4.条件控制5.小结 二、例题讲解问题&#xff1a;1264 - 4位反序数问题&#xff1a;1085 - 寻找雷劈数问题&#xff1a;1057 - 能被5整除且至少有一位数字是5的所有整数的个数问题&#xff1a;1392 - 回文偶数&#xff1f;问题&a…

Linux命令 netstat -anp | grep 的用法

文章目录 1、第一种解释2、第二种解释3、第三种解释4、第四种解释5、第五种解释6、netstat --help 在Windows中&#xff0c;杀死端口占用的博客链接 1、第一种解释 在Unix和Linux系统中&#xff0c;netstat -anp 命令用于显示所有的网络连接&#xff08; -a 表示所有&#xff…

maridb10.4.30数据库数据迁移

1.新建数据存储文件夹&#xff0c;例如E:\maridb_data 2.修改原数据所在目录的my.ini文件&#xff0c;例如D:\Program Files\MariaDB 10.4\data\my.ini 3.剪切除my.ini文件外的其他所有文件到迁移目的地文件(E:\maridb_data) 结果如下&#xff1a; 原数据文件目录&#xff1a…

聊聊限流的一些事儿

一、背景 最近几年&#xff0c;随着微服务的流行&#xff0c;服务与服务之间依赖越来越强&#xff0c;调用也越来越复杂&#xff0c;服务间的稳定性变突显出来。特别是在遇到突发请求时&#xff0c;常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其…

C++命名空间(详解)

C基础语法 C基于C语言的改进&#xff1a;c在C语言的基础上引入并扩充了面向对象的概念 C基础概念&#xff1a;C是基于C语言而产生的,它即可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计 在1998年 出现C98…

爱普生差分晶振在光模块中的重要角色

光模块是现代通信设备中的重要组成部分&#xff0c;主要用于实现光电转换和信号传输&#xff0c;它是一种将光信号转换为电信号&#xff0c;或者将电信号转换为光信号的设备。在光纤通信中&#xff0c;光模块扮演着至关重要的角色。 光模块的主要组成部分包括光源、光接收器、…

OSPF学习笔记(状态机)

1、邻居关系 OSPF设备启动后&#xff0c;会通过OSPF接口向外发送Hello报文&#xff0c;收到Hello报文的OSPF设备会检查报文中所定义的参数&#xff0c;如果双方一致就会形成邻居关系&#xff0c;两端设备互为邻居 2、邻接关系 形成邻居关系后&#xff0c;如果两端设备成功交…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

C# :IQueryable IEnumerable

文章目录 1. IEnumerable2. IQueryable3. LINQ to SQL4. IEnumerable & IQueryable4.1 Expression4.2 Provider 1. IEnumerable namespace System.Collections: public interface IEnumerable {public IEnumerator GetEnumerator (); }public interface IEnumerator {pubi…

气泡式水位计施工技术要求

1、气泡式水位计压力气管出气口应安装并固定在最低水位处&#xff0c;其压力气管也应固定&#xff0c;有条件的可用金属管或塑料管保护。气泡式水位计安装示意图见附图。 2、安装要求 1&#xff09;检查气泡式水位计气管外观有无破损及变形&#xff1b; 2&#xff09;旋开带有…

特征工程技巧—Bert

前段时间在参加比赛&#xff0c;发现有一些比赛上公开的代码&#xff0c;其中的数据预处理步骤值得我们参考。 平常我们见到的都是数据预处理&#xff0c;现在我们来讲一下特征工程跟数据预处理的区别。 数据预处理是指对原始数据进行清洗、转换、缩放等操作&#xff0c;以便为…

Blackwell未来发展之路究竟如何?

英伟达Blackwell如何重塑AI计算的未来&#xff1f; 前言 台湾大学演讲 就在6月2日&#xff0c;英伟达CEO黄仁勋在中国台湾大学综合体育馆发表了最新的演讲。这次黄仁勋的演讲依旧重磅&#xff0c;更值得注意的是这次演讲中还透露了Blackwell今后的发展之路。 介绍Blackwell 介绍…