Codeforces Round 942 (Div. 2) (A-D2)C++题解

news/2024/12/22 9:00:16/

链接 : 

Dashboard - Codeforces Round 942 (Div. 2) - Codeforces

A. Contest Proposal

数据范围小,模拟就好了;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;
using namespace std;inline void solve(){int n ; cin >> n ;vector<int> a(n) , b(n) ;for(int i=0;i<n;i++) cin >> a[i] ;for(int j=0;j<n;j++) cin >> b[j] ;int ans = 0 ;sort(a.begin(),a.end()) ;sort(b.begin(),b.end()) ;for(int i=0;i<n;i++){if(a[i]<=b[i]){continue ;}else{ans ++ ;a.push_back(1) ;sort(a.begin(),a.end()) ;a.pop_back() ;sort(a.begin(),a.end()) ;}}cout << ans << endl ;
}signed main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

B. Coin Games

猜一下,当U出现次数是奇数,Alice能赢,否则Bob能赢 ;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'#define int long long
typedef long long LL;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
using namespace std;inline void solve() {int n ; cin >> n ;vector<int> a(n+1) ;int t = 0 ;for(int i=1;i<=n;i++) {char c ; cin >> c ;if(c=='U') a[i] = 1 , t ++;else a[i] = 0 ;}if(t&1) cout << "YES" << endl ;else cout << "NO" << endl ;
}signed main()
{IOSint _ = 1;cin >> _;while (_--) solve();return 0;
}

C. Permutation Counting

贪心,先对数据进行排序,因为要求[1,n]排列,那么一定优先用k买原本数量少的卡片,使每种卡片的最少数量尽可能大;

这里可以用二分进行查找这个数量 ,假设为l;

那么最少组成k组[1,n]排列 : 为了得到最大ans,一定是交错排列 : 1,2,3..n,1,2,3...,n,1,2,3...n

如图 : 

那么至少可以得到(l-1)*n+1个全排列;

那么对于多出来的卡片,每种可以拿出一个贴在现有排列的两边,使ans++,,如果有多余的k,也是这个贪心的套路,详情请看代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;
using namespace std;LL a[N] ,b[N] ;
LL n , k ;bool pd(int x){LL z = 0 ;for(int i=1;i<=n;i++){if(a[i]<x) z += x - a[i] ;else break ;if(z>k) return false;}if(z>k) return false;return true ;
}inline void solve(){cin >> n >> k ;LL sum = 0 ;for(int i=1;i<=n;i++) cin >> a[i] , sum += a[i] ;sort(a+1,a+1+n) ;LL mi = a[1] , ma = a[n] ;LL l = mi-1 , r = 2e12 + 8 ;while(l+1<r){LL mid = l + (r-l) / 2 ;if(pd(mid)) l = mid ;else r = mid ;}// cout << l << endl ;LL ys = sum + k - 1LL * l * n ;LL ans = n * l - n + 1 ;if(ys==0) {cout << ans << endl ; return ;}for(int i=1;i<=n;i++)if(a[i]<l)k -= l - a[i] ;for(int i=n;i>=1;i--){if(a[i]>l) ans ++ ;else if(k) ans ++ ,k -- ;else break ;}cout << ans << endl ;//	int idx = -1 ; 
//	for(int i=n;i>=1;i--){
//		// l 个
//		if(a[i]<=l) break ;
//		idx = i ; 
//	}
//	int t = n - idx + 1 ;
//	LL yy = min(n-1,a[idx]-l);
//	if(ys==1 || t==1) ans ++ ;
//	else if(ys>=2) ans += 2 * yy  ;
//	cout << ans << endl ;
}signed main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

D1. Reverse Card (Easy Version)

要满足(a+b) % (b*gcd(a,b)) == 0;

首先可以得到(a+b) % b == 0,那么a = kb一定成立,那么gcd(a,b) =b;

==> (kb+b) % (b*b) == 0

==> k = xb-1

那么暴力枚举每一个b就好了 :

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;
using namespace std;LL get(LL a , LL b){return a/b ;
}inline void solve(){int n , m ; cin >> n >> m ;LL ans = 0 ;// 求 (a+b) % b方 == 0的数量// a = kb2-bfor(int i=1;i<=m;i++){if(i==1) ans += n ;else{LL b = i*i ; // b ^ 2// 每次加b : kb-i <= n // k<=(n+1)/bans += get(n+i,b) ; }} cout << ans << endl ;
}signed main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

D2. Reverse Card (Hard Version)

解析  : 

 1 . b * gcd(a , b) % (a + b) == 02 . 设 g =  gcd(a,b) , 则 a=xg , b=yg ;   3 . ==> gy * g = k * (gx + gy)4 . ==> gy = k * (x + y);5 . 由2可得 : x,y互质。那么y,x+y也互质6 . ==> g = k * (x+y);7 . ==> a=k*(x+y)*x,b=k*(x+y)*y ,满足a%x==0,b%y==0,gcd(x,y)==1  

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;
using namespace std;int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}// 1 . b * gcd(a , b) % (a + b) == 0
// 2 . 设 g =  gcd(a,b) , 则 a=xg , b=yg ;   
// 3 . ==> gy * g = k * (gx + gy)
// 4 . ==> gy = k * (x + y);
// 5 . 由2可得 : x,y互质。那么y,x+y也互质
// 6 . ==> g = k * (x+y);
// 7 . ==> a=k*(x+y)*x,b=k*(x+y)*y ,满足a%x==0,b%y==0,gcd(x,y)==1  inline void solve(){int a , b ; cin >> a >> b ;int ans = 0 ;for(int x=1;x<=a/x;x++){for(int y=1;y<=b/y;y++){if(gcd(x,y)==1){int cnt = min(a/((x+y)*x),b/((x+y)*y));if(cnt>=1) ans += cnt ;}}}	cout << ans << endl ;
}signed main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}


http://www.ppmy.cn/news/1452765.html

相关文章

《Beginning C++20 From Novice to Professional》第七章Working with Strings

字符串处理是非常令人关注的领域&#xff0c;因为大部分情况下我们的程序不是在处理数字而是在处理字符串&#xff0c;对于字符串的表示和操作成为编程语言中非常重要的一部分 书里也强调C中对于字符串的处理要好过C风格的char数组&#xff0c;更高效也更安全 本章我们可以学…

【Java】java实现文件上传和下载(上传到指定路径/数据库/minio)

目录 上传到指定路径 一、代码层级结构 二、文件上传接口 三、使用postman进行测试&#xff1b; MultipartFile接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFile part接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFileByRequest 接收前端传递…

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里&#xff0c;甲方经常会给我们一些格式化的文本&#xff0c;类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

【C++】二叉树的进阶

二叉树的进阶 二叉搜索树概念操作实现创建树形结构拷贝构造函数构造函数析构函数赋值运算符重载循环版本查找插入删除 递归版本查找插入删除 应用K模型KV模型性能分析 二叉树进阶面试题二叉树创建字符串二叉树的分层遍历I最近公共祖先二叉搜索树与双向链表前序遍历与中序遍历构…

面试题分享之Java集合篇(三)

注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 面试题分享之Java基础篇&#xff08;二&#xff09;面试题分享之Java基础篇&#xff08;三&#xff09; 面试题分享之Java集合篇&#xff08;一&#xff09;、 面试题分享之Ja…

【代码随想录】day48

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、198打家劫舍二、213打家劫舍II三、337打家劫舍III 一、198打家劫舍 class Solution { public:int rob(vector<int>& nums) {vector<int> dp(n…

JET毛选学习笔记:如何利用《矛盾论》从做实验到做科研vol. 2

上一节讲完矛盾的普遍性和特殊性都已经5000字了&#xff0c;为了不影响阅读观感&#xff08;多水几篇&#xff09;&#xff0c;把他们进行了拆分&#xff0c;那我就继续侃大山吧。 五、矛盾的同一性和斗争性 先做名词解释&#xff1a; 矛盾的同一性&#xff08;统一&#xf…

neo4j 的插入速度为什么越来越慢,可能是使用了过多图谱查询操作

文章目录 背景描述分析解决代码参考neo4j 工具类Neo4jDriver知识图谱构建效果GuihuaNeo4jClass 背景描述 使用 tqdm 显示&#xff0c;处理的速度&#xff1b; 笔者使用 py2neo库&#xff0c;调用 neo4j 的API 完成节点插入&#xff1b; 有80万条数据需要插入到neo4j图数据中&am…