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

抛出一个结论:

\[f_s=f_0+\sum_{i\in s}(f_{2^i}-f_0)
\]

其中 \(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的更多相关文章

  1. ARC144 D - AND OR Equation

    ARC144 D - AND OR Equation Solution 首先可以猜测和答案仅和每一个二进制位以及\(f(0)\)有关系,不妨把按位\(\operatorname{AND}\)和按位\( ...

  2. ARC145~152 题解

    比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...

随机推荐

  1. SpringBoot——MVC原理

    更多内容,前往 IT-BLOG 一.SpringMVC自动配置 SpringMVC auto-configuration:SpringBoot 自动配置好了SpringMVC.以下是 SpringBo ...

  2. 使用golang+antlr4构建一个自己的语言解析器(一)

    Antlr4 简介 ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Ja ...

  3. rocketmq-spring : 实战与源码解析一网打尽

    RocketMQ 是大家耳熟能详的消息队列,开源项目 rocketmq-spring 可以帮助开发者在 Spring Boot 项目中快速整合 RocketMQ. 这篇文章会介绍 Spring Boo ...

  4. [Python]【Form Data vs Request Payload】之 python 爬虫如何实现 POST request payload 形式的请求

    1 问题描述 欲使用Python的requests库(requests.session().request(...))实现对此Ajax的POST请求进行模拟实现. 但在chrome发现其请求的形式不一 ...

  5. [Git]解决GIT冲突问题:git pull failed

    1 文由 花了很长时间一次性修改了项目的一大堆文件,准备最后git pull同步一下本地仓库代码,再一次性git commit,git push新代码的. but天不遂人愿,git pull时产生冲突 ...

  6. [Java]排序算法>交换排序>【快速排序】(O(N*logN)/不稳定/N较大/无序/仅顺序存储)

    1 快速排序 1.1 算法思想 快速排序是由冒泡排序改进而得的. 在冒泡排序过程中,只对相邻的2个记录进行比较:因此,每次交换2个相邻记录时,只能消除1个逆序. 若能通过2个(不相邻)记录的1次交换, ...

  7. Nuxtjs实现服务端渲染和静态化站点

    本文将介绍如何使用Nuxtjs对vue项目进行ssr和静态化处理. Nuxtjs简单介绍 首先,我们简单了解下Nuxtjs框架,Nuxt.js是一个基于Vue的通用框架,主要用于解决Vue项目的服务端 ...

  8. 常见API使用

    String类 字符串相关的类 Java程序中的所有字符串文字(例如"abc")都实现为此类的实例 字符串是不变的 他们的值在创建后无法更改 int length() 返回字符串对 ...

  9. AI测试101:测试AI系统的实用技巧&ML和AI自动化工具

    基于人工智能的系统,也称为神经网络(NN Neural Networks),和其他应用程序一样是 "系统",因此需要测试.本文将指导你测试AI和基于NN的系统,并理解相关概念. 测 ...

  10. mongodb使用自带命令工具导出导入数据

    记录 mongo 数据库用原生自带的命令工具使用 json 文件方式进行导入.导出的操作! 在一次数据更新中,同事把老数据进行了清空操作,但是新的逻辑数据由于某种原因(好像是她的电脑中病毒了),一直无 ...