删除最少的数位和前缀0,使得剩下的数能被3整除

等价于各数位数字之和能被3整除。

当前数位和可能是 0, 1, 2(mod 3)

  0: 直接处理

  1: 删除一个a[i]%3 == 1 或者 两个a[i]%3 == 2

  2: 同1

对于删完的数列,去掉前置0(只剩前置0就当作0)

若删啥都不满足,则判断原数列中有没有0,不然就输出-1

 #include <bits/stdc++.h>
using namespace std;
const int MAXN = ;
char s[MAXN];
int a[MAXN], n;
string ans, tmp;
int b[MAXN], m;
void Update()
{
tmp.clear();
int i;
for (i = ; i <= m && !b[i]; i++);
if (i < m+)
{
for (i; i <= m; i++)
tmp += b[i] + '';
}
else if (m)
tmp += '';
if (ans.length() < tmp.length())
ans = tmp;
}
int main()
{
scanf("%s", s);
n = strlen(s);
for (int i = ; i <= n; i++)
a[i] = s[i-] - '';
int sum = ;
for (int i = ; i <= n; i++)
sum = (sum+a[i]%) % ;
if (!sum)
{
m = ;
for (int i = ; i <= n; i++)
b[++m] = a[i];
Update();
}
else
{
int p1 = , p2 = ;
for (int i = n; i > && !p1; i--)
if (a[i]% == sum) p1 = i;
if (p1)
{
m = ;
for (int i = ; i <= n; i++)
{
if (i == p1) continue;
b[++m] = a[i];
}
Update();
}
p1 = p2 = ;
for (int i = n; i > && (!p1 || !p2) ; i--)
if (a[i]% +sum == ) p1 ? p2 = i : p1 = i;
if (p1 && p2)
{
m = ;
for (int i = ; i <= n; i++)
{
if (i == p1 || i == p2) continue;
b[++m] = a[i];
}
Update();
}
}
if (!ans.length())
{
bool flag = ;
for (int i = ; i <= n; i++)
if (!a[i]) flag = ;
puts(flag? "": "-1");
}
else cout << ans << endl;
}

CodeForces 792C - Divide by Three [ 分类讨论 ]的更多相关文章

  1. codeforces 792C. Divide by Three

    题目链接:codeforces 792C. Divide by Three 今天队友翻了个大神的代码来问,我又想了遍这题,感觉很好,这代码除了有点长,思路还是清晰易懂,我就加点注释存一下...分类吧. ...

  2. Codeforces 685C - Optimal Point(分类讨论+乱搞)

    Codeforces 题面传送门 & 洛谷题面传送门 分类讨论神题. 首先看到最大值最小,一眼二分答案,于是问题转化为判定性问题,即是否 \(\exists x_0,y_0,z_0\) 满足 ...

  3. Codeforces 1513F - Swapping Problem(分类讨论+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 简单题,难度 *2500 的 D2F,就当调节一下一模炸裂了的自闭的心情,稍微写写吧. 首先我看到这题的第一反应是分类讨论+数据结构,即枚 ...

  4. Codeforces 1461F - Mathematical Expression(分类讨论+找性质+dp)

    现场 1 小时 44 分钟过掉此题,祭之 大力分类讨论. 如果 \(|s|=1\),那么显然所有位置都只能填上这个字符,因为你只能这么填. scanf("%d",&n);m ...

  5. Codeforces 870F - Path(数论+分类讨论+正难则反)

    Codeforces 题目传送门 & 洛谷题目传送门 首先考虑 \(d(u,v)\) 是个什么东西,分情况讨论: \(u\not\perp v\),\(d(u,v)=1\) \(u\perp ...

  6. CodeForces - 792C Divide by Three (DP做法)

    C. Divide by Three time limit per test: 1 second memory limit per test: 256 megabytes input: standar ...

  7. ACM学习历程—CodeForces 590A Median Smoothing(分类讨论 && 数学)

    题目链接:http://codeforces.com/problemset/problem/590/A 题目大意是给一个串,头和尾每次变换保持不变. 中间的a[i]变成a[i-1],a[i],a[i+ ...

  8. CodeForces 382C Arithmetic Progression (排序+分类讨论)

    题意:给出一个长度为n的序列,表示有n张卡片,上面的数字,现在还有一张卡片,上面没有数字,问说可以写几种数字在这张卡片上面, 使得n+1张卡片上的数字可以排列成一个等差数列,有无限多种时输出-1. 析 ...

  9. CodeForces - 1221E Game With String 分类讨论

    首先分析A能获胜的情况 A能获胜 当且仅当A拿完后所有剩下的都<b 所以一旦存在一个大小为X的 且 b<=X<a 则必是后手赢 当X为 a<=x<2*b 的时候 无论A或 ...

随机推荐

  1. 结对编程-如何用精简的java代码写出这个系统

    [写在前面]这篇博客是软件工程这门课中要求结对编程.规则是这样的:结对的两个人,分别看对方个人项目代码,2天时间内,分析对方代码优点和缺点.我是来分析凌嘉文同学的代码. 先写一下个人项目中的项目需求, ...

  2. GCD和LCM

    GCD _ LCM 是给你两个数A B 的最大公约数, 以及最小公倍数 the greatest common divisor and the least common multiply ! 最大公约 ...

  3. F. 汤圆防漏理论

    ghc很喜欢吃汤圆,但是汤圆很容易被粘(zhān)漏. 根据多年吃汤圆经验,ghc总结出了一套汤圆防漏理论: 互相接触的汤圆容易粘(zhān)在一起,并且接触面积不同,粘(zhān)在一起的粘(niá ...

  4. Ruby Rails学习中:Sass 和 Asset Pipeline,布局中的链接(Rails路由,具名路由),用户注册: 第一步

    接上篇: 一.Sass 和 Asset Pipeline Rails 中最有用的功能之一是 Asset Pipeline, 它极大地简化了静态资源文件(CSS.JavaScript 和图像)的生成和管 ...

  5. Selenium IDE for firefox

    第一次接触selenium. 首先, selenium支持的 Firefox版本是17.0~34.x. 打开火狐历史版本:http://ftp.mozilla.org/pub/firefox/rele ...

  6. Java 反射理解(二)-- 动态加载类

    Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...

  7. 11 Django实现WebSocket

    因为需要实时显示状态的需求,想到了websocket,但是Django原生不支持websocket,后来搜索到了chango-channels项目,可以实现次需求. 一.Channels 官方文档 二 ...

  8. 实现双向绑定Proxy比defineproperty优劣如何?

    前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向绑定 ...

  9. js 使用sessionStorage总结与实例

    作用:它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在.但当页面关闭后,sessionStorage 中的数据就会被清空 sessionStorage的方法setItem存储value ...

  10. Resource通配符路径 ——跟我学spring3

    转自: https:// jinnianshilongnian.iteye.com/blog/1416322