首页 > 其他分享 >AtCoder Regular Contest 123 C 1, 2, 3 - Decomposition

AtCoder Regular Contest 123 C 1, 2, 3 - Decomposition

时间:2023-04-26 21:56:11浏览次数:54  
标签:AtCoder typedef 10 ll Contest Regular long 123

洛谷传送门

AtCoder 传送门

从低位往高位考虑。设当前个位为 \(k\),暴力搜索这一位向上进 \(i\) 位,设 \(\left\lfloor\frac{n}{10}\right\rfloor - i\) 的答案为 \(t\)。

  • 若 \(t > 10i + k\) 显然就不可行,因为就算个位全部填 \(1\) 也不能补齐;
  • 否则 \(n\) 的答案就是 \(\max(t, \left\lceil\frac{10i+k}{3}\right\rceil)\),取 \(\max\) 是因为有可能之前不够个位至少需要数的个数,要补。

直观感觉是 \(i\) 不会很大(事实上 \(i \le 1\)),所以这个做法跑得很快。

code
// Problem: C - 1, 2, 3 - Decomposition
// Contest: AtCoder - AtCoder Regular Contest 123
// URL: https://atcoder.jp/contests/arc123/tasks/arc123_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

ll dfs(ll n) {
	if (n < 10) {
		return (n + 2) / 3;
	}
	ll k = n % 10;
	for (int i = 0;; ++i) {
		if (!k && !i) {
			continue;
		}
		ll t = dfs(n / 10 - i);
		if (t <= k + 10 * i) {
			return max(t, (k + 10 * i + 2) / 3);
		}
	}
}

void solve() {
	ll n;
	scanf("%lld", &n);
	printf("%lld\n", dfs(n));
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:AtCoder,typedef,10,ll,Contest,Regular,long,123
From: https://www.cnblogs.com/zltzlt-blog/p/17357477.html

相关文章

  • AtCoder Regular Contest 120 F Wine Thief
    洛谷传送门AtCoder传送门Hint如果是一个环怎么做?Answer由于是一个环,因此环上每个点对最终答案造成的贡献都相同。设$f_{i,j}$为长度为$i$的序列选$j$个不相邻的点的方案数,则$f_{i,j}=\binom{i-j+1}{j}$。应该很好理解,考虑一个长度为$i-j+1$的链,链头、链尾和两......
  • AtCoder Regular Contest 125 E Snack
    洛谷传送门AtCoder传送门很棒的flow题,考虑建二分图。源点向每种零食连边权为\(a_i\)的边,每种零食向每个孩子连边权为\(b_j\)的边,每个孩子向汇点连边权为\(c_j\)的边,这个图的最大流就是答案。直接跑最大流肯定T,考虑最大流等价于求这个图的最小割,因此转而求最小割。......
  • AtCoder Regular Contest 126 D Pure Straight
    洛谷传送门AtCoder传送门很不错的状压。考虑先把最后作为答案的数聚到一起,再算它们的逆序对个数。设\(f_S\)为当前选的数集合为\(S\)的答案。有转移:选\(a_i\),答案加上之前选的比它大的数;不选\(a_i\),此时需要把左边的数或者右边的数往中间挪一个,答案加上左右两端的最......
  • Converting a regular DB2 DMS tablespace to LARGE
    ConvertingaregularDB2DMStablespacetoLARGEhttps://www.ibm.com/support/pages/converting-regular-db2-dms-tablespace-large#:~:text=Convert%20the%20tablespace%20to%20LARGE%20by,running%3A%20alter%20tablespace%20tbspace_name%20CONVERT%20TO%20......
  • AtCoder Regular Contest 115 F Migration
    洛谷传送门AtCoder传送门这种最大值最小化的题一般可以先考虑二分。设二分了一个\(mid\)。记\(A=(a_1,a_2,...,a_k)\)为表示每个棋子的位置的状态,如果\(A,B\)可以互相到达,就在它们之间连一条无向边。则要判断的是\(S=(s_1,s_2,...,s_k)\)和\(T=(t_1,t_2,...,t_k......
  • Virsh常用命令-v4-20210308_123613
    Virsh常用命令企业云平台产品中心共享知识库Exportedon03/08/2021TableofContentsVirsh是基于libvirt写的一个命令行工具,用来通过Virsh来对虚拟机的生命周期进行管理,以下是常用的一些Virsh命令:1、查看在运行的虚拟机virshlist2、查看创建的所有虚拟机virshlist--all3、启......
  • Codeforces Round #306 (Div. 2) D. Regular Bridge 构造
    Anundirectedgraphiscalledk-regular,ifthedegreesofallitsverticesareequalk.Anedgeofaconnectedgraphiscalledabridge,ifafterremovingitthegraphisbeingsplitintotwoconnectedcomponents.Buildaconnectedundirectedk-regularg......
  • AtCoder Beginner Contest 158
    AtCoderBeginnerContest158https://atcoder.jp/contests/abc158基础不牢,地动山摇D-StringFormation一个小小的STL应用#include<bits/stdc++.h>#definelllonglongusingnamespacestd;strings;intq,t,f;charc;intmain(){cin>>s>>q......
  • AtCoder Problem Difficulty
    ABC299之前.......
  • AtCoder Regular Contest 111 F Do you like query problems?
    洛谷传送门AtCoder传送门挺有意思的计数。计数感觉很难做,不妨转成期望,期望又可以转成概率之和。考虑枚举\(w\in[0,m-1]\),把\(>w\)的数设为\(1\),\(\lew\)的数设为\(0\)。那么期望就是所有\(w\),\(a_i\)为\(1\)的概率之和。对于一个\(i\),只有以下的操作能改变\(......