首页 > 其他分享 >Atcoder ARCaea 118 B

Atcoder ARCaea 118 B

时间:2022-11-12 17:13:21浏览次数:40  
标签:Atcoder mods 毫升 ARCaea int 药剂 long ++ 118

我又来啦!
光 & 对立

题面

小 A 正在调配药剂。
传说中有一种最强的药剂,叫做 Tempestissimo ,用了 $ K $ 种药剂,标号 $ 1 \sim K $ 。
当时(由于这药剂只调配过一次)分别用了 $ A_1, A_2, A_3, \cdots, A_K $ 毫升。(注:总共是 $ N $ 毫升)
现在,小 A 有 $ M $ 毫升可转换为任何一种液体的液体(好神奇!),他想调配出这种药剂,
可惜……可惜 $ < 1 $ 毫升的部分将会爆炸(?),所以每种都只能变整数毫升。
小 A 想请你来帮他决定最佳值($ B_1, B_2, B_3, \cdots, B_K $)毫升(注:小 A 想把 $ M $ 毫升全用完),使得 $ \max_{i} | \frac{A_i}{N} - \frac{B_i}{M} | $ 最小(即调配出来的药剂最接近 Tempestissimo)。
你能完成吗?
话说这翻译与原题差异简直太大了

解法

回忆率:简单 - 音符流失后的回忆率丢失程度减小
显然,我们的 $ B_i $ 就应该按照 $ A_i $ 的比例去调配。
则 $ B_i = \frac{A_iM}{N} $ 。
但你这 $ B_i $ 是小数啊!
那就……

\[B_i = \lfloor \frac{A_iM}{N} \rfloor \]

然后,和不够 $ M $ 怎么办?
回忆率:困难 - 回忆率归零后直接判定为乐曲失败
那就取 $ A_iM \bmod N $ ,排序,从大到小排
然后从前往后,依次加 1。
至于为什么你们自己想吧,反正我是 DL(D + Track Lost)了。

代码

#include <bits/stdc++.h>
using namespace std;

long long a[100005];
long long b[100005];
vector<pair<long long, int> > mods;

int main() {
	int k;
	long long n, m;
	scanf("%d %lld %lld", &k, &n, &m);
	for (int i = 0; i < k; i++) {
		scanf("%lld", &a[i]);
	}
	long long sum = 0;
	for (int i = 0; i < k; i++) {
		b[i] = a[i] * m / n;
		sum += b[i];
		mods.emplace_back(a[i] * m % n, i);
	}
	long long diff = m - sum;
	sort(mods.begin(), mods.end(), greater<pair<int, int> >());
	for (int i = 0; i < diff; i++) {
		b[mods[i].second]++;
	}
	for (int i = 0; i < k; i++) {
		printf("%lld ", b[i]);
	}
	return 0;
}

标签:Atcoder,mods,毫升,ARCaea,int,药剂,long,++,118
From: https://www.cnblogs.com/AProblemSolver/p/16884170.html

相关文章

  • 塔防(cover)Atcoder/Codeforces的某道题
    题目背景在某个塔防游戏中,有一种防御塔,可以攻击到上下左右四个方向以及自身位置的敌人。题目描述塔防游戏的⼀个关卡地图可以看作⼀个的矩阵,也就是⾏,列的矩阵。其......
  • AtCoder Regular Contest 149 D Simultaneous Sugoroku
    很妙的一个题。没法用数据结构直接维护点的移动。可以挖掘一些性质。发现对于两个点\(x\)和\(-x\),它们的移动关于原点对称。可以根据对称性维护森林。维护当前的区间......
  • atcoder abc 276
    A-Rightmost题意:给定一个字符串,确定字母a,最后出现的位置,若字符串中没有出现字母a,则输出-1思路:遍历统计代码:#include<bits/stdc++.h>usingnamespacestd;int......
  • Atcoder Grand Contest 004(A~F)
    这场半VP做的,就不分赛时赛后写了,直接放每道题的解法。A-DivideaCuboid当某一维的长度为偶数的时候,显然可以在这一维的中间切,两部分方块的最小差为\(0\)。当每一......
  • PAT (Advanced Level) Practise 1118 Birds in Forest (25)
    1118.BirdsinForest(25)时间限制150ms内存限制65536kB代码长度限制16000B......
  • AtCoder Beginner Contest 275
    A-FindTakahashi找到序列中最高的数存在的位置#include<bits/stdc++.h>usingnamespacestd;intread(){intx=0,f=1,ch=getchar();while((c......
  • Atcoder Beginner Contest 276(A~G)
    赛时A简单字符串处理;B简单vector处理;C找上一个排列。D找到每一个数因子\(2\)的个数和\(3\)的个数,并判断除去这些因子之后剩下的值是否相同,若不同则不能满足条......
  • 【118】
    1684. 统计一致字符串的数目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称......
  • AtCoder Beginner Contest 276
    A-Rightmost#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){strings;cin>>s;for(inti=s.size();i>=1;i--)i......
  • AtCoder Regular Contest 070&071
    ARC070只会个DQAQ,所以就合并到ARC071了。ARC070D-NoNeed给定\(n\)个整数\(a_1\sima_n\),对于\(a_i\),若原来所有包含\(a_i\)且和\(\geK\)的子集去掉\(......