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 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

11
5

33

Sample Output

2

10

0

21

Note

In the first sample 4 = 2 + 2, a = 2 is the only possibility.

In the second sample 11 = 10 + 1, a = 10 — the only valid solution. Note, that a = 01 is incorrect, because a can‘t have leading zeroes.

It‘s easy to check that there is no suitable a in the third sample.

In the fourth sample 33 = 30 + 3 = 12 + 21, so there are three possibilities for aa = 30, a = 12, a = 21. Any of these is considered to be correct answer.

思路

题意:给出数字n,问是否存在一个数x,使得 x + flip(x) = n (其中 flip(x)为x的反转,反转后忽略前导0)

题解:对于前后两个对称位置,如果相等,则res[i]=(num[i]+1)/2,ans[n-i-1]=num[i]/2,若不相等,考虑两种情况,一种是来自低位的进位,一种是来自高位的退位

  • 当num[i] == num[n - i - 1] + 1 || num[i] == num[n - i - 1] + 11,说明第 i 位有来自低位的进位,因此将其还原即可,亦即使得num[i]--,num[i + 1] += 10;
  • 当num[i] == num[n - i - 1] + 10,说明第 i 位有来自高位的退位,因此使得第 n - i - 1 位也有来自高位的退位,,亦即使得num[n - i - 2]--,num[n - i - 1] += 10;
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
char s[maxn],res[maxn];
int num[maxn];

bool check(int n)
{
	for (int i = 0;i < n / 2;)
	{
		if (num[i] == num[n - i - 1])	i++;
		else if ((num[i] == num[n - i - 1] + 1) || (num[i] == num[n - i - 1] + 11))  //来自低位的进位
		{
			num[i]--;
			num[i + 1] += 10;
		}
		else if (num[i] == num[n - i - 1] + 10)     //来自高位的退位
		{
			num[n - i - 2]--;
			num[n - i - 1] += 10;
		}
		else	return false;
	}
	if (n % 2 == 1)
	{
		if ((num[n/2]%2 == 1) || (num[n/2] > 18) || (num[n/2] < 0))	return false;
		else	res[n/2] = num[n/2]/2 + ‘0‘;
	}
	for (int i = 0;i < n / 2;i++)
	{
		if (num[i] > 18 || num[i] < 0)	return false;
		res[i] = (num[i] + 1) / 2 + ‘0‘;
		res[n - i - 1] = num[i] / 2 + ‘0‘;
	}
	return res[0] > ‘0‘;
}

int main()
{
	scanf("%s",s);
	int len = strlen(s);
	for (int i = 0;i < len;i++)	num[i] = s[i] - ‘0‘;
	if (check(len))	puts(res);
	else if (s[0] == ‘1‘ && len > 1)
	{
		for (int i = 0;i < len;i++)	num[i] = s[i + 1] - ‘0‘;
		len--;
		num[0] += 10;
		if (check(len))	puts(res);
		else	puts("0");
	}
	else	puts("0");
	return 0;
}

  

时间: 2024-12-29 01:58:12

Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)的相关文章

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 by heart rules of Russian language, some try to become an outstanding competitive programmers, while others collect funny math objects. Alis is among

Codeforces Round #342 (Div. 2)

怒A三题.虽然有点水 A. Guest From the Past 题意:就说一个人去喝酒,有n块钱,塑料瓶装的就是a块钱一瓶,玻璃瓶装酒是b块钱一瓶,一个玻璃瓶又可以换c块钱,问最多能喝到多少瓶酒 思路:很经典的模拟问题,类那个猴子吃桃,多少核桃又可以换一个桃那种题,不过这个题目有个坑点,看代码把 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 using namespace std; 5

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 Gogol continue their fierce competition. Crucial moment is just around the corner: Gogol is ready to release it's new tablet Lastus 3000. This new devic

Codeforces Round #342 (Div. 2) A. Guest From the Past(贪心)

传送门 Description Kolya Gerasimov loves kefir very much. He lives in year 1984 and knows all the details of buying this delicious drink. One day, as you probably know, he found himself in year 2084, and buying kefir there is much more complicated. Koly

【打CF,学算法——二星级】Codeforces Round #313 (Div. 2) B. Gerald is into Art(水题)

[CF简单介绍] 提交链接:http://codeforces.com/contest/560/problem/B 题面: B. Gerald is into Art time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Gerald bought two very rare paintings at the Sotheby's a

Codeforces Round #384 (Div. 2) B. Chloe and the sequence(规律题)

传送门 Description Chloe, the same as Vladik, is a competitive programmer. She didn't have any problems to get to the olympiad like Vladik, but she was confused by the task proposed on the olympiad. Let's consider the following algorithm of generating a

Codeforces Round #296 (Div. 2) C. Glass Carving(想法题)

传送门 Description Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glass). He already has a rectangular wmm  ×  h mm sheet of glass, a diamond glass cutter and lots of enthusiasm. What he lacks is understa

Codeforces Round #244 (Div. 2)B. Prison Transfer(想法题)

传送门 Description The prison of your city has n prisoners. As the prison can't accommodate all of them, the city mayor has decided to transfer c of the prisoners to a prison located in another city. For this reason, he made the n prisoners to stand in

Codeforces Round #411 (Div. 2)C. Find Amir(想法题)

传送门 Description A few years ago Sajjad left his school and register to another one due to security reasons. Now he wishes to find Amir, one of his schoolmates and good friends. There are n schools numerated from 1 to n. One can travel between each pa