首页 > 其他分享 >AGC004 题解

AGC004 题解

时间:2024-09-03 23:25:35浏览次数:3  
标签:10 AGC004 int 题解 ll Read num Solve

目录

A - Divide a Cuboid

显然长方体必须被平行于某个面切开,否则不满足要求。
枚举被哪个面切开,设这个面是 \(a \times b\),不属于这个面的棱长为 \(c\),如果可以从正中间切开,即 \(c \bmod 2 = 0\) 时就从正中间切开,红蓝块个数差值为 \(0\)。否则,\(c \bmod 2 = 1\),从正中间偏移 \(0.5\) 格切开最优,红蓝块个数差值为 \(a \times b\)。
由于 \(a, b, c \ge 2\),所以没有边界情况,放心计算三种情况取最小值即可。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll Read() {
	int sig = 1;
	ll num = 0;
	char c = getchar();
	while(!isdigit(c)) {
		if(c == '-') {
			sig = -1;
		}
		c = getchar();
	}
	while(isdigit(c)) {
		num = (num << 3) + (num << 1) + (c ^ 48);
		c = getchar();
	}
	return num * sig;
}
void Write(ll x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x >= 10) {
		Write(x / 10);
	}
	putchar((x % 10) ^ 48);
}

ll Solve(ll a, ll b, ll c) {
	return (a & 1) ? (b * c) : 0ll;
}

int main() {
	ll a = Read(), b = Read(), c = Read();
	Write(min(Solve(a, b, c), min(Solve(b, a, c), Solve(c, a, b))));
	return 0;
}

B - Colorful Slimes

\(N\) 很小,考虑枚举操作二次数 \(k\),容易发现此时 \(i\) 号颜色的史莱姆可以由 \(j\) 号颜色的史莱姆变换而来,当且仅当 \((i - j + N) \bmod N \le k\),即操作二次数小于等于 \(k\)(若进行 \(p\) 次操作,那么可以在 \(k - p\) 次操作后购买史莱姆)。
因此只需从 \(0 \sim N - 1\) 枚举 \(k\),对所有数取向前 \(k\) 个数及其本身的最小值求和,再加上 \(k \cdot x\) 即可。
复杂度 \(O(N^2)\),当然貌似可以用三分降到 \(O(N \log N)\),但是我懒。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll Read() {
	int sig = 1;
	ll num = 0;
	char c = getchar();
	while(!isdigit(c)) {
		if(c == '-') {
			sig = -1;
		}
		c = getchar();
	}
	while(isdigit(c)) {
		num = (num << 3) + (num << 1) + (c ^ 48);
		c = getchar();
	}
	return num * sig;
}
void Write(ll x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x >= 10) {
		Write(x / 10);
	}
	putchar((x % 10) ^ 48);
}

const int N = 2005;
int n;
ll a[N], b[N];

int main() {
	int i, j;
	ll x;
	n = Read(), x = Read();
	ll ans = LONG_LONG_MAX;
	for(i = 1; i <= n; i++) {
		a[i] = b[i] = Read();
	}
	for(i = 0; i < n; i++) {
		ll res = 0;
		for(j = 1; j <= n; j++) {
			b[j] = min(b[j], a[(j - i + n - 1) % n + 1]);
			res += b[j];
		}
		ans = min(ans, res + x * i);
	}
	Write(ans);
	return 0;
}

标签:10,AGC004,int,题解,ll,Read,num,Solve
From: https://www.cnblogs.com/IncludeZFR/p/18395642

相关文章

  • 2024 秋季PAT认证甲级(题解A1-A4)
    2024秋季PAT认证甲级(题解A-D)写在前面这一次PAT甲级应该是最近几次最简单的一次了,3个小时的比赛差不多30分钟就ak了(也是拿下了整场比赛的rk1),下面是题解报告,每个题目差不多都是20-30行代码,难度在洛谷普及组左右(cf1000-1200分)A.A-1HappyPatting题目描述The"HappyPatti......
  • 力扣-968监控二叉树(Java贪心详细题解)
    题目链接:968.监控二叉树-力扣(LeetCode)前情提要:本题是一道名副其实的hard题目,他考察二叉树和贪心的综合运用能力。所以我们不仅要会贪心还要会二叉树的一些知识,如果没有写二叉树类型的题目,建议大家该题可以放放,去刷其他的题目。因为本人最近都来刷贪心类的题目所以该......
  • [AGC004D] Teleporter
    题意给定一张\(n\)个点的有向图,每个点都有一条出边。初始保证所有点都能走到\(1\)。你需要重新规划最少的出边,使得最终每个节点都存在一条长度为\(k\)的路径走到节点\(1\)。\(n\le10^6\)Sol显然给定的图为一棵基环树。对环与树分类讨论。首先注意到每个点都能走......
  • AtCoder ABC 369题解
    前言本题解部分思路来源于网络,仅供参考!A-369题目大意给定\(A\),\(B\)两个整数,求有多少个整数\(x\)使得可以通过某种排列使得\(A\),\(B\),\(x\)为等差数列。解题思路稍加分析即可得到:如果\(A=B\)则结果为\(1\)。如果\(A=B\)但\((A+B)\bmod......
  • 09-03 题解
    09-03题解比赛地址补题地址这回打算改变一下方式,从写"怎么做题"变成"怎么想题"T1什么样的两个\(a_i\)能被合并到一个Bug上?很简单(不过我也想了好一会),mod2同余的两个可以合并在一起为了培养最强Bug,肯定不能往上叠负数,所以上述内容针对序列中的所有正......
  • [蓝桥杯 2018 省 A] 付账问题--贪心题解
    题目重述:[蓝桥杯2018省A]付账问题-洛谷#[蓝桥杯2018省A]付账问题##题目描述几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。现在有$n$个人出去吃饭,他们总共消费了$S$元。其中第$i$个人带了$a_i$元。幸运的是,所有人带的钱的总数是......
  • 蓝桥杯2019省A糖果题解
     附上链接:[蓝桥杯2019省A]糖果-洛谷,有兴趣的小伙伴可以去试试哦~#[蓝桥杯2019省A]糖果##题目描述糖果店的老板一共有$M$种口味的糖果出售。为了方便描述,我们将$M$种口味编号$1$∼$M$。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而......
  • 8.30 上午 becoder 模拟赛总结 & 题解
    T1密码当时想到解法了,却依然认为自己不会做,我真是个人才。结论:对于$\foralli\in[1,n)$,满足密码不是$a_i$的因数,且密码是$a_k$的因数,设满足条件的最小值为$g$则答案为$\frac{n}{g}$。一种最好想的做法:枚举$\gcd(a_k,n)$的因数作为$g$,并枚举$i\in[1,n)$,判断是......
  • 8.31 上午 becoder 模拟赛总结 & 题解
    T1四个质数的和赛场亲测搜索+小剪枝可以得到70pts。考虑$O(p(V)^2)$枚举任意两个质数的和,其中$p(V)$表示$V$以内质数的个数。然后开个数组记录下对于每种和的记录有多少种情况,查询时for循环扫一遍即可,详见代码。复杂度去掉质数筛$O(p(V)^2+tn)$,代码贴在下面(100pts)......
  • 8.31 下午 梦熊联盟 NOIP 模拟赛总结 & 题解
    T1北极星一个比较好想到的点是从后往前枚举数,计算得出它需要的操作次数,然后给所有前面的数都加上这个操作次数,这样就把每个数独立出来了。所以这道题就变成了如何快速通过这些操作得到一个指定的数。观察大样例的输出,发现每一个数都是11?1?1?的形式,其中问号为+或c,我们可......