Codeforces792C【构造】
来源:互联网 发布:iphone不能用蜂窝数据 编辑:程序博客网 时间:2024/05/29 14:42
题意:
一个美丽的数就是不含前导0,而且是3的倍数。
现在给你一个n,问去掉最少的数使得变成一个美丽的数。
思路:
对于原先的数,把每位数的求和然后%3,
1. =0,直接输出。
2. =1,去掉一个1/去掉两个2,不满足的输出-1
3. =2,去掉一个2/去掉两个1,不满足的输出-1
4. 注意处理完可能是空串或者含前导零。
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<stack>#include<queue>#include<deque>#include<map>#include<algorithm>using namespace std;typedef long long LL;//#pragma comment(linker, "/STACK:102400000,102400000")const double PI = acos(-1.0);const double eps = 1e-6;const int INF=0x3f3f3f3f;const int N=100010;const int mod = 1e9+7;char s[N];int a[N];string ans;string a1,a2;string Print(){ string temp=""; int len = ans.length(); reverse(ans.begin(),ans.end()); int i=0; while(ans[i]=='0') i++; if(i==len) temp.push_back('0'); else{ while(i<len) { temp.push_back(ans[i]); i++; } } return temp;}int main(){ scanf("%s",s); int len = strlen(s); int sum = 0; int num1,num2; num1=num2= 0; for(int i = 0; i < len; i++) { a[i] = (s[i]-'0')%3; sum += a[i]; if(a[i] == 1) num1++; else if(a[i] == 2) num2++; } sum %= 3; if(sum == 0){ puts(s); return 0; } int f; if(sum==2){ ans = ""; a1=""; a2=""; f=0; for(int i=len-1;i>=0;i--){ if(f<2 && a[i]==1) f++; else ans.push_back(s[i]); } if(f==2&&ans.length()) a1=Print(); ans = ""; f=0; for(int i=len-1;i>=0;i--){ if(f<1 && a[i]==2) f++; else ans.push_back(s[i]); } if(f==1 && ans.length()) a2=Print(); if(a1.length()>a2.length()) cout<<a1; else if(a2.length()) cout<<a2; else puts("-1"); } else { ans = ""; a1=""; a2=""; f=0; for(int i=len-1;i>=0;i--){ if(f<2 && a[i]==2) f++; else ans.push_back(s[i]); } if(f==2 && ans.length()) a1=Print(); ans = ""; f=0; for(int i=len-1;i>=0;i--){ if(f<1 && a[i]==1) f++; else ans.push_back(s[i]); } if(f==1 && ans.length()) a2=Print(); if(a1.length()>a2.length()) cout<<a1; else if(a2.length()) cout<<a2; else puts("-1"); } return 0;}
阅读全文
0 0
- Codeforces792C【构造】
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造、拷贝构造、析构
- 构造器(构造方法)
- 构造、拷贝构造、赋值
- 构造方法/构造器
- 拷贝构造 赋值构造
- 构造中调用构造
- 构造方法 构造器 构造函数
- 构造解决方案
- 构造函数
- 构造器
- 分组构造
- php 重定向问题
- Java 8 Lambda : Comparator 例子
- eclipse下载网址
- QTP DataTable
- 点击复制按钮将指定id内容复制到剪贴板
- Codeforces792C【构造】
- ubuntu12.04 扫描局域网IP地址命令nmap
- 牛客网编程小结(四)——map
- namespace in c++用法详解
- Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
- 动态设置form表单的action属性的值的方法
- 关于File类的使用
- 算法谜题
- URAL1889