Edu18 -- Divide by Three --- 题解

目录

Divide by Three:

题目大意:

​编辑​编辑思路解析:

代码实现:


Divide by Three:

题目大意:

        

思路解析:

        一个数字是3的倍数,那么他的数位之和也是3的倍数,所以我们可以O(N)的得到这个数字数位之和模3的结果,如果模3为0,则这个数就是一个美丽的数,如果模3不为0,则他需要取除某些数字.

        那我们想它最多去除几个数字,最多取除两个,因为在模3系统下,任意1-9的数都会等价与1-2,当总体剩下1时,只要有1就删除1,否则就删除两个2,当总体剩下2时,只要有2就删除2,否则就删除两个1,这里删除的1和2是等价的1和2.

        删除之后我们比较这两个情况那个更优秀,删除时从后往前删,因为如果从前往后删,我们还需要考虑删除这个数,后面的是否会变成前缀为0,但是如果从后往前删,就不需要考虑,除非它只能删除这个数使得前缀为0。

        还有特殊情况,删除后没数字剩余了,或者删除后只剩下0了;

代码实现:

        

import java.beans.IntrospectionException;
import java.io.*;
import java.math.BigInteger;
import java.util.*;public class Main {static int tot = 0;static int maxn = 123460;static int[][] ch;static int[] tag;static long ans = 0;static long[] sum = new long[maxn];static int[] arr = new int[maxn];static HashMap<Integer, ArrayList<Integer>> map;static int k;public static void main(String[] args) throws IOException {char[] s = f.next().toCharArray();int n = s.length;int sum = 0;int[] cnt = new int[3];for (int i = 0; i < n; i++) {sum = (sum + s[i] - '0') % 3;cnt[(s[i] - '0') % 3]++;}if (sum == 0){for (int i = 0; i < n; i++) {w.print(s[i]);}w.flush();w.close();return;}char[] ans = new char[n];char[] res = new char[n];int p = 0;int q = 0;if (sum == 1){if (cnt[1] >= 1){int tag = 1;for (int i = n-1; i >= 0; i--) {if ((s[i] - '0') % 3 == 1 && tag >= 1){tag--;}else ans[p++]= s[i];}}if (cnt[2] >= 2){int tag = 2;for (int i = n-1; i >= 0; i--) {if ((s[i] - '0') % 3 == 2 && tag >= 1){tag--;}else res[q++]= s[i];}}}else {if (cnt[1] >= 2){int tag = 2;for (int i = n-1; i >= 0; i--) {if ((s[i] - '0') % 3 == 1 && tag >= 1){tag--;}else ans[p++]= s[i];}}if (cnt[2] >= 1){int tag = 1;for (int i = n-1; i >= 0; i--) {if ((s[i] - '0') % 3 == 2 && tag >= 1){tag--;}else res[q++]= s[i];}}}int flag1 = 0, flag2 = 0;while (p >= 1 && ans[p - 1] == '0') {p--; flag1 = 1;}while (q >= 1 && res[q - 1] == '0') {q--; flag2 = 1;}if (flag1 == 1 && p == 0) ans[p++] ='0';if (flag2 == 1 && q == 0) res[q++] ='0';if (p == 0 && q == 0) w.println(-1);else {if (q > p){for (int i = q - 1; i >= 0; i--) {w.print(res[i]);}}else {for (int i = p - 1; i >= 0; i--) {w.print(ans[i]);}}}w.flush();w.close();}public static void get(int x, int r, int p , int cur, long res){if (res >= k && tag[p] == 1){ArrayList<Integer> list = map.get(p);for (Integer l : list) {ans = Math.max(ans, (sum[r] - sum[l - 1]) / (r - l + 1));}}if (cur < 0)return;int c = (x >> cur) & 1;if (ch[p][1 - c] != 0 && res + (1L << (cur + 1)) - 1>= k) get(x, r, ch[p][1 - c], cur-1, res + (1L <<cur));if (ch[p][c] != 0 && res + (1L << (cur)) - 1 >= k) get(x, r, ch[p][c], cur-1, res);}public static void insert(int x, int id){int p = 0;for (int i = 30; i >= 0; i--) {int c = ((x >> i) & 1);if (ch[p][c] == 0) ch[p][c] = ++ tot;p = ch[p][c];}tag[p] = 1;if (map.containsKey(p)){ArrayList<Integer> list = map.get(p);list.add(id);}else {ArrayList<Integer> list = new ArrayList<>();list.add(id);map.put(p, list);}}public static long qkm(long a, long mod){long res = 1;long b = mod - 2;while(b > 0){if ((b & 1) == 1) res = (res * a) % mod;a = (a * a) % mod;b >>= 1;}return res;}static PrintWriter w = new PrintWriter(new OutputStreamWriter(System.out));static Input f = new Input(System.in);static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static class Input {public BufferedReader reader;public StringTokenizer tokenizer;public Input(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() {while (tokenizer == null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(reader.readLine());} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public String nextLine() {String str = null;try {str = reader.readLine();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return str;}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public Double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525905.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0基础学习VR全景平台篇第143篇:限定访问功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用限定访问功能。 一.什么是限定访问功能&#xff1f; 限定访问&#xff0c;就是可以在编辑后台设置可以访问作品的用户的类型&#xff0c;还有可以访问作品的IP…

【每日刷题】栈与队列-LC394、LC347、LC215

题外话&#xff1a;感觉脑子没长到栈这块…最近刷栈的题都好难啊…哭哭…坚持坚持&#xff01;多刷几遍就好了&#xff01;&#xff01; 1. LC394.字符串解码 题目链接 先说数据结构。 维护两个栈&#xff1a;一个栈存之前的字符串&#xff0c;另一个栈存之后的字符串的重复…

OpenAI GPT LLMs 高级提示词工程方法汇总

原文地址&#xff1a;An Introduction to Prompt Engineering for OpenAI GPT LLMs Github&#xff1a;Prompt-Engineering-Intro 2023 年 3 月 2 日 Naive 提示词&#xff1a;带有提示的情感分类器 prompt Decide whether a Tweets sentiment is positive, neutral, or …

基于ThinkPHP框架的校园一卡通系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 框架技术 3 1.1.1 Bootstrap 3 1.1.2 ThinkPHP框架 3 1.2 前端技术 4 1.2.1 JavaScript 4 1.2.2 ECharts 4 1.3 B/S架构 4 1.4 数据库技术 5 1.4.1 MySQL 5 1.5 本章小结 6 2 系统分析 7 2.1 功能需求分析 7 2.2 非功能需…

每日OJ题_路径dp①_力扣62. 不同路径

目录 力扣62. 不同路径 解析代码 力扣62. 不同路径 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标…

博士推荐 | 薄膜、涂层技术和液晶材料/器件领域的博士

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

SLAM|初识SLAM

在空间中&#xff0c;人可以通过固定不动的事物来作为参考系中的参照物。 而这些固定不动的东西可以称之为特征&#xff0c;空间可以理解成特征存在的空间。 而参照物的意义&#xff0c;可以变成是看到某某参照物&#xff0c;就按这个某某参照物进行位置移动。 比如说碰到这个…

基于Springboot的高校宣讲会管理系统。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校宣讲会管理系统。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

【Python】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 Python 目录&#xff1a; &#xff08;一&#xff09;装饰器函数 &#xff08;二&#xff09;牛客网—软件开发-Python专项练习 &#xff08;三&#xff09;time模块

鸿蒙原生应用元服务开发-WebGL网页图形库开发概述

WebGL的全称为Web Graphic Library(网页图形库)&#xff0c;主要用于交互式渲染2D图形和3D图形。目前HarmonyOS中使用的WebGL是基于OpenGL裁剪的OpenGL ES&#xff0c;可以在HTML5的canvas元素对象中使用&#xff0c;无需使用插件&#xff0c;支持跨平台。WebGL程序是由JavaScr…

图|dfs bfs|最小生成树|最短路|一篇搞定图的所有知识点

文章目录 图前言项目代码仓库图的基本概念图的表示方法邻接矩阵邻接表图的一些相关概念 图的遍历bfsdfs如果给的图不是连通图&#xff1f; 最小生成树Kruskal算法Prim算法 最短路径单源最短路径--Dijkstra算法单源最短路径--Bellman-Ford算法多源最短路径--Floyd-Warshall算法 …

代码理解 eq

import torchls2 torch.Tensor([0.2,0.2,0.1])print(ls2.eq(0.2)) print(ls2.eq(0.2).float())