Codeforces Round #342 (Div. 2) D. Finals in arithmetic 贪心
D. Finals in arithmetic
题目连接:
http://www.codeforces.com/contest/625/problem/D
Description
Vitya is studying in the third grade. During the last math lesson all the pupils wrote on arithmetic quiz. Vitya is a clever boy, so he managed to finish all the tasks pretty fast and Oksana Fillipovna gave him a new one, that is much harder.
Let's denote a flip operation of an integer as follows: number is considered in decimal notation and then reverted. If there are any leading zeroes afterwards, they are thrown away. For example, if we flip 123 the result is the integer 321, but flipping 130 we obtain 31, and by flipping 31 we come to 13.
Oksana Fillipovna picked some number a without leading zeroes, and flipped it to get number ar. Then she summed a and ar, and told Vitya the resulting value n. His goal is to find any valid a.
As Oksana Fillipovna picked some small integers as a and ar, Vitya managed to find the answer pretty fast and became interested in finding some general algorithm to deal with this problem. Now, he wants you to write the program that for given n finds any a without leading zeroes, such that a + ar = n or determine that such a doesn't exist.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 10100 000).
Output
If there is no such positive integer a without leading zeroes that a + ar = n then print 0. Otherwise, print any valid a. If there are many possible answers, you are allowed to pick any.
Sample Input
4
Sample Output
2
Hint
题意
给你一个数k,要求你找到一个数x,使得x+反着的x = k
比如33,你就可以找21,因为21+12=33
不允许前导0
题解:
贪心,我们先不管前导0这个条件,我们如果sum[i]==sum[n-i-1]的话,ans[i]=(sum[i]+1)/2,ans[n-i-1]=sum[i]/2就好了
如果不相等的话,我们应该怎么呢?我们需要考虑进位
要么从后一位进1,要么从前一位退10回来,就这两种,讨论一下就好了
注意165这种数据,1开头的
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
char s[maxn];
char ans[maxn];
int sum[maxn];
int n;
int check()
{
for(int i=0;i<n/2;)
{
int l=i,r=n-1-i;
if(sum[l]==sum[r])
i++;
else if(sum[l]==sum[r]+1||sum[l]==sum[r]+11)//考虑从后面进了一位,11 = 1+10
{
sum[l]--;
sum[l+1]+=10;
}
else if(sum[l]==sum[r]+10)//考虑从R前面退一位
{
sum[r-1]--;
sum[r]+=10;
}
else return 0;
}
if(n%2==1)
{
if(sum[n/2]%2==1||sum[n/2]>18||sum[n/2]<0)return 0;
ans[n/2]=sum[n/2]/2+'0';
}
for(int i=0;i<n/2;i++)
{
if(sum[i]>18||sum[i]<0)return 0;
ans[i]=(sum[i]+1)/2+'0';
ans[n-i-1]=(sum[i])/2+'0';
}
return ans[0]>'0';
}
int main()
{
scanf("%s",s);
n=strlen(s);
for(int i=0;i<n;i++)
sum[i]=s[i]-'0';
if(check())return puts(ans);
if(s[0]=='1'&&n>1)//首位为1的时候
{
for(int i=0;i<n;i++)
sum[i]=s[i+1]-'0';
sum[0]+=10;
n--;
if(check())puts(ans);
else printf("0");
}
else
printf("0");
}
Codeforces Round #342 (Div. 2) D. Finals in arithmetic 贪心的更多相关文章
- Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)
传送门 Description Vitya is studying in the third grade. During the last math lesson all the pupils wro ...
- Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心
Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- Codeforces Round #342 (Div. 2)
贪心 A - Guest From the Past 先买塑料和先买玻璃两者取最大值 #include <bits/stdc++.h> typedef long long ll; int ...
- Codeforces Round #342 (Div. 2) C. K-special Tables 构造
C. K-special Tables 题目连接: http://www.codeforces.com/contest/625/problem/C Description People do many ...
- Codeforces Round #342 (Div. 2) B. War of the Corporations 贪心
B. War of the Corporations 题目连接: http://www.codeforces.com/contest/625/problem/B Description A long ...
- Codeforces Round #342 (Div. 2) A - Guest From the Past 数学
A. Guest From the Past 题目连接: http://www.codeforces.com/contest/625/problem/A Description Kolya Geras ...
- Codeforces Round #342 (Div. 2) E. Frog Fights set 模拟
E. Frog Fights 题目连接: http://www.codeforces.com/contest/625/problem/E Description stap Bender recentl ...
- Codeforces Round #342 (Div. 2) C. K-special Tables(想法题)
传送门 Description People do many crazy things to stand out in a crowd. Some of them dance, some learn ...
- Codeforces Round #342 (Div. 2) B. War of the Corporations(贪心)
传送门 Description A long time ago, in a galaxy far far away two giant IT-corporations Pineapple and Go ...
随机推荐
- Delphi 调用串口例子
procedure TfrmClientMain.SayAddr;var sbuf:array[1..7] of byte;begin sbuf[1]:=byte($35); sbuf[2]:=byt ...
- ANSI
为了扩充ASCII编码,以用于显示本国的语言,不同的国家和地区制定了不同的编码标准,由此产生了GB2312.BIG5.JIS等各自的编码标准.这些使用两个字节来代表一个字符的各种汉字延伸编码方式被称为 ...
- yield汇编实现
yield汇编实现. #include <stdio.h #include <conio.h #include <iostream.h // // marks a location ...
- bzoj3620 似乎在梦中见过的样子
好久没有写过KMP了,今天写个KMP练练手.此题就是枚举左端点暴力,用KMP做到O(n^2) #include<cstdio> #include<cstring> using ...
- Lucene 入门需要了解的东西
全文搜索引擎的原理网上大段的内容,要想深入的学习,最好的办法就是先用一下,lucene 发展比较快,下面是写第一个demo 要注意的一些事情: 1.Lucene的核心jar包,下面几个包分别位于不同 ...
- Spring3 整合Quartz2 实现定时任务
一.Quartz简介 Quartz是一个由James House创立的开源项目,是一个功能强大的作业调度工具,可以计划的执行任务,定时.循环或在某一个时间来执行我们需要做的事,这可以给我们工作上带来很 ...
- 初识Rest、JSR、JCP、JAX-RS及Jersey
REST:即表述性状态传递(英文:Representational State Transfer,简称REST)是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论. JSR是Java S ...
- Zookeeper,Hbase 伪分布,集群搭建
工作中一般使用的都是zookeeper和Hbase的分布式集群. more /etc/profile cd /usr/local zookeeper-3.4.5.tar.gz zookeeper在安装 ...
- POJ 2653 Pick-up sticks(判断线段相交)
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7699 Accepted: 2843 De ...
- Linux查看系统信息命令总结
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinf ...