ARC144
ARC 144
比赛情况:一眼订正,鉴定为做起 \(3\) 道题。
A - Digit Sum of 2x
\(2x\) 进位就不满足 \(M\) 最大的条件了,所以 \(x\) 不能进位。
然后要求 \(x\) 最小,只要 \(N\%4\neq 0\) 则最高位为 \(N\% 4\),否则最高位为 \(4\)。后面只能全填 \(4\) 了,因为这样位数最小。
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e6+50;
int main()
{
int N;
cin>>N;
printf("%d\n",2*N);
if(N%4!=0)
printf("%d",N%4);
for(int i=1;i<=N/4;i++)
printf("4");
}
B - Gift Tax
贪心地看,要把最小的数弄大的同时把最大的数弄小。
有了贪心策略,就可以二分答案了,对于当前二分的答案,把 \(A\) 从小到大排序,双指针判一下就好。
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e6+50;
int N;
int a,b;
int A[MAXN],B[MAXN];
bool Check(int Now)
{
for(int i=1;i<=N;i++)
{
B[i]=A[i];
}
int l=1,r=N;
long long Add=0;
while(l<r)
{
if(B[l]>=Now)
{
return true;
}
else
{
Add+=(Now-B[l]-1)/a+1;
while(Add&&l<r)
{
if(B[r]-Now>=Add*b)
{
B[r]-=Add*b;
Add=0;
break;
}
else
{
Add-=(B[r]-Now)/b;
r--;
}
}
}
l++;
}
if(Add)
{
return false;
}
else
{
return true;
}
}
int main()
{
scanf("%d%d%d",&N,&a,&b);
int l=1e9,r=0;
for(int i=1;i<=N;i++)
{
scanf("%d",&A[i]);
l=min(l,A[i]);
r=max(r,A[i]);
}
sort(A+1,A+N+1);
int Mid,ans=0;
while(l<=r)
{
Mid=l+r>>1;
if(Check(Mid))
{
ans=Mid;
l=Mid+1;
}
else
{
r=Mid-1;
}
}
cout<<ans;
}
C - K Derangement
考虑无解,只要存在一个值无论在哪里都放不了就无解。也就是 \(K>\lfloor \frac{N}{2} \rfloor\) 时无解。
假设 \(N\) 无穷大,那一定是每 \(2K\) 一个周期,这个周期内 \(A_i\) 的取值为 \(i+K\),\(A_{i+K}\) 的取值为 \(i\)。因为这能够让小的数被第一时间用掉,所以是最优的。
而事实上如果 \(N\) 不是 \(2K\) 的倍数,就会出问题,最后面会放不下。
所以最后预留一个整的长度为 \(2K\) 的段和剩下的长度为 \(N\%2K\) 的段。
对于这两个段,从后往前填,最大的几个数放在能放的最后一个位置。
剩下没放的位置,和剩下没用过的数字,越前面用越小的数字就行了。
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e6+50;
int N,K;
int Ans[MAXN];
bool Use[MAXN];
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
scanf("%d%d",&N,&K);
if(K>N/2)
{
puts("-1");
return 0;
}
for(int i=1;i<=N;i++)
{
q.push(i);
}
int Now=1;
for(;Now+(K<<1)<=N-(K<<1);Now+=(K<<1))
{
for(int i=Now;i<Now+K;i++)
{
Ans[i]=i+K;
Ans[i+K]=i;
Use[i]=Use[i+K]=true;
}
}
for(int i=Now;i<Now+K;i++)
{
Ans[i]=i+K;
Use[i+K]=true;
}
for(int i=N-(K<<1)+1;i<=N-K;i++)
{
Ans[i]=i+K;
Use[i+K]=true;
}
for(int i=1;i<=N;i++)
{
if(Ans[i]==0)
{
while(Use[q.top()])
q.pop();
Ans[i]=q.top();
q.pop();
}
printf("%d ",Ans[i]);
}
}
D - AND OR Equation
抛出一个结论:
\]
其中 \(i\in s\) 表示 \(s\) 二进制表示下第 \(i\) 位是 \(1\)。
按照题解的方法,令 \(c=f_0,g_i=f_{2^i}-c\)。
所以对于任意一组 \(\{c,g_0,...,g_{n-1}\}\) 都能构造出来一组 \(f\)。
所以原问题变成求有多少满足条件的上文所说的集合。
根据题意,\(0\leq c \leq K\)。
咕,明天继续写。
ARC144的更多相关文章
- ARC144 D - AND OR Equation
ARC144 D - AND OR Equation Solution 首先可以猜测和答案仅和每一个二进制位以及\(f(0)\)有关系,不妨把按位\(\operatorname{AND}\)和按位\( ...
- ARC145~152 题解
比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...
随机推荐
- java多线程---4 线程同步介绍及不安全案例说明
java多线程---4 线程同步介绍及不安全案例说明 线程同步 并发: 同一个对象被多个线程同时操作. 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时候我们就需要线程同步 ...
- 选择KV数据库最重要的是什么
本文分享自华为云社区<选择KV数据库最重要的是什么?>,作者:GaussDB 数据库 . 经常有客户提到KV数据库,但却偏偏"不要Redis".比如有个做安全威胁分析平 ...
- node.js介绍及简单例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- R数据分析:生存分析的列线图的理解与绘制详细教程
列线图作为一个非常简单明了的临床辅助决策工具,在临床中用的(发文章的)还是比较多的,尤其是肿瘤预后: Nomograms are widely used for cancer prognosis, p ...
- 每日复习------main()方法以及对象的初始化顺序
由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方 ...
- python:调用内置函数
问题描述:尝试下博客园如何上传GIF # hzh 每天进步一点点 # 2022/5/13 17:24 import colorama import time import os colorama.in ...
- Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?
系列文章 Terraform 系列文章 前言 最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用 ...
- 【SSM项目】尚筹网(二)基于Servlet3.0项目搭建:日志系统以及声明式事务
1 日志系统 常见的日志系统实现log4j.JUL(jdk自带).log4j2.logback(和SLF4J同一个作者,能够天然衔接),这些实现就类似于java的接口实现,而SLF4J就类似于java ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(14)-Charles过滤网络请求
1.简介 在日常工作测试中,经常要抓包看请求的request,response是不是传的对,返回的字段值对不对,众多的请求中看得眼花缭乱,如何找到自己想要的请求,那么我们就需要过滤请求.Charles ...
- js如何引入高德地图API?
准备 成为开发者并创建 key 1.登录控制台 登录 高德开放平台控制台,如果没有开发者账号,请 注册开发者. 2.创建 key 进入应用管理,创建新应用,新应用中添加 key,服务平台选择 Web端 ...