CF1515
时间:2021-09-16
本文章向大家介绍CF1515,主要包括CF1515使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CF1515
A:CF1515A Phoenix and Gold
因为所有数并不相同,所以这个题解决起来很简单,如果前缀和 \(ans=x\) 时,交换前后两个数位置就行了,其他的正常输出。
#include<bits/stdc++.h>
using namespace std;
int T,n,x;
const int N=1e2+5;
int a[N];
int main(){
cin>>T;
while(T--){
cin>>n>>x; int ans=0,flag=0;
for(int i=1;i<=n;i++) scanf("%d",&a[i]),ans+=a[i];
if(ans==x){puts("NO"); continue;}
puts("YES"); ans=0;
for(int i=1;i<=n;i++){
ans+=a[i];
if(ans==x){
swap(a[i],a[i+1]);
printf("%d %d ",a[i],a[i+1]); ans+=a[i];
i++; continue;
}
printf("%d ",a[i]);
}
puts("");
}
// system("pause");
return 0;
}
B:CF1515B Phoenix and Puzzle
考虑一下怎么可以构成一个正方形:当两个或者四个相同等腰直角三角形可以组成。
而且这两种组合方法不能同时用。
因此必须 \(\frac{n}{2}\) 或 \(\frac{n}{4}\) 是完全平方数才行。
判断一下即可。
#include<bits/stdc++.h>
using namespace std;
int T,n;
bool check(int x){
if(sqrt(x)*sqrt(x)==x) return 1;
return 0;
}
int main(){
cin>>T;
while(T--){
cin>>n;
if(check(n/2)||check(n/4)) puts("YES");
else puts("NO");
}
return 0;
}
C:CF1515C Phoenix and Towers
贪心问题,我们遍历 \(n\) 个数字, 每次把当前这个数字放到总和最小的组里即可.
因为我们最后要求任意两组之前的差值尽可能的小, 相当于让 \(m\) 组数尽可能的平均. 我们贪心去做即可(从大到小一个一个放).
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N=1e5+10;
int res[N],n,m,k,T;
int main()
{
cin>>T;
while(T--){
priority_queue<PII, vector<PII>, greater<>>q;//放里面西巴
scanf("%d %d %d", &n, &m, &k);
for(int i=1;i<=m;i++) q.push({0,i}); //第二维是组数的下标
for(int i=1,x;i<=n;i++){
scanf("%d", &x);
auto op=q.top(); q.pop();
op.first+=x; res[i]=op.second;
q.push(op);
}
puts("YES");
for(int i=1;i<=n;i++) printf("%d ",res[i]); puts("");
}
// system("pause");
return 0;
}
D:CF1515D Phoenix and Socks
依然是贪心。
对于所有能匹配的情况,我们肯定能匹配就匹配。(大废话)
设对于左右不同颜色的直接匹配为硬匹配,花费 \(2\) 元。
不花钱的处理完了之后,若存在 \(L != R\) 的情况,此时不能直接硬匹配。
如果 \(L\) 多,就在 \([1,L]\) 中找找,能不能改方向,不改颜色匹配。
因为此时硬匹配不但要改颜色而且要改方向,不如先在L中看看能不能同方向匹配,能的话绝对是赚的,每匹配一对,最终少改一次颜色.
最后剩下的只能硬匹配了
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,T,l,r,a[N],col[N],cor[N];
int main(){
cin>>T;
while(T--){
int finish=0,ans=0;
cin>>n>>l>>r;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
if(i<=l) col[a[i]]++;
else cor[a[i]]++;
}
int nl=l,nr=r;
for(int i=1;i<=l;++i){//处理左右匹配
if(col[a[i]]&&cor[a[i]]){
col[a[i]]--; cor[a[i]]--;
nl--; nr--;
}
}
if(nl>=nr){
for(int i=1;i<=l;++i)//处理左匹配
if(col[a[i]]>=2&&nl>nr){
col[a[i]]-=2;
nl-=2; ans++;
}
ans+=(nl-nr)/2+(nl+nr)/2;
}
else {//处理右匹配
for(int i=l+1;i<=n;++i)
if(cor[a[i]]>=2&&nr>nl){
cor[a[i]]-=2;
nr-=2; ans++;
}
ans+=(nr-nl)/2+(nr+nl)/2;
}
cout<<ans<<endl ;
for(int i=1;i<=n;++i) col[i]=cor[i]=0;
}
return 0;
}
原文地址:https://www.cnblogs.com/guanlexiangfan/p/15302405.html
- H2Engine游戏服务器设计之属性管理器
- linux epoll 开发指南-【ffrpc源码解析】
- Python之递归函数
- 你不得不会的MarkDown
- 状态机的实现探讨
- Docker入门实战(二)——Docker镜像操作
- 使用强大的 Mockito 来测试你的代码
- java学习手册-CentOS 6.3(x86_32)下安装Oracle 10g R2
- Docker入门实战(三)——用Dockerfile构建镜像
- C++中消息自动派发之二 About IDL解析器
- C++中消息自动派发之三 About JSON Encode
- Linux管道命令
- Linux数据流重定向
- C++中消息自动派发之四 使用IDL构建Chat Server
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法