HD-ACM算法专攻系列(4)——A == B ?

题目描述:

源码:

/**/
#include"iostream"
#include"string"
using namespace std;

string Standard(string str)
{
	int start;
	int len = str.length();
	char * p = new char[len + 2];
	start = 0;
	if(str[0] == ‘-‘ || str[0] == ‘+‘)
	{
		p[0] = str[0];
		start = 1;
	}
	else
	{
		p[0] = ‘+‘;
	}
	for(int i = start; i < len; i++)
	{
		if(str[i] == ‘0‘)
		{
			start++;
		}
		else
		{
			break;
		}
	}
	bool hasDot = false;
	for(int i = start; i < len; i++)
	{
		if(str[i] == ‘.‘)
		{
			hasDot = true;
			break;
		}
	}
	if(hasDot)
	{
		for(int i = len - 1; i >= start; i--)
		{
			if(str[i] == ‘0‘)
			{
				len--;
			}
			else
			{
				break;
			}
		}
	}
	int index = 1;
	if(str[len - 1] == ‘.‘)
	{
		len--;
	}
	for(int i = start; i < len; i++)
	{
		p[index++] = str[i];
	}
	p[index] = ‘\0‘;
	return string(p);
}

int main()
{
	string a, b;
	while(cin>>a>>b)
	{
		a = Standard(a);
		b = Standard(b);
		if(a == b)
		{
			cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}

	}
    return 0;
}

  

时间: 2024-07-29 12:05:14

HD-ACM算法专攻系列(4)——A == B ?的相关文章

HD-ACM算法专攻系列(23)——Crixalis&#39;s Equipment

题目描述: AC源码:此次考察贪心算法,解题思路:贪心的原则是使留下的空间最大,优先选择Bi与Ai差值最大的,至于为什么?这里用只有2个设备为例,(A1,B1)与(A2,B2),假设先搬运A1,搬运的那一瞬间,实际将要占用的空间应该为A1+B2,那么为了保证留下的空间最大,则应该有A1+B2<A2+B1成立,才能先搬运A1,即B1-A1>B2-B1.(n个设备可以两两做这样的比较,来达到选择的最优) #include"iostream" #include"algo

HD-ACM算法专攻系列(17)——考试排名

问题描述: 源码: 主要要注意输出格式. #include"iostream" #include"iomanip" #include"algorithm" #include"string" using namespace std; struct Person { string name; int count; int score; }; bool cmp(Person a, Person b) { if(a.count >

HD-ACM算法专攻系列(7)——排序

题目描述: 源码: #include"iostream" #include"string" using namespace std; void Order(int *p, int n) { int tmp; if(n < 2)return; for(int i = 0; i < n - 1; i++) { for(int j = 0; j < n - i - 1; j++) { if(p[j] > p[j + 1]) { tmp = p[j]

HD-ACM算法专攻系列(21)——Max Sum

问题描述: AC源码: 此题考察动态规划,解题思路:遍历(但有技巧),在于当前i各之和为负数时,直接选择以第i+1个为开头,在于当前i各之和为正数时,第i个可以不用作为开头(因为前i+1个之和一定大于第i+1个的值) #include"iostream" using namespace std; int main() { int t, n, start, end, sum, max, tmp; int a[100000]; scanf("%d", &t);

HD-ACM算法专攻系列(19)——七夕节

问题描述: AC源码: /**/ #include"iostream" #include"cmath" using namespace std; int main() { int t, n, sq, sum; scanf("%d", &t); for(int i = 0; i < t; i++) { scanf("%d", &n); sum = 1; sq = (int)sqrt(n); for(int

HD-ACM算法专攻系列(16)——find your present (2)

题目描述: 源码: #include"iostream" #include"string" using namespace std; bool IsFirstHalf(string *strs, int n, string str) { int count = 0; for(int i = 0; i < n; i++) { if(str < strs[i])count++; } return count >= (n / 2 + n % 2); }

HD-ACM算法专攻系列(14)——Quoit Design

问题描述: 源码: 经典问题--最近邻问题,标准解法 #include"iostream" #include"algorithm" #include"cmath" using namespace std; struct Point { double x; double y; }; Point S[100000];//不使用全局变量可能会超内存 bool cmpPointX(Point a, Point b) { return a.x > b

HD-ACM算法专攻系列(10)——大明A+B

题目描述: 源码: 需要注意的一点是输出是最简形式,需要去除小数的后导0,而调用stripTrailingZeros()函数后,数会以科学计数法输出,所以需要调用toPlainString(). import java.math.BigDecimal; import java.util.*; public class Main { //主函数 public static void main(String[] args) { BigDecimal a, b; Scanner cin = new S

ACM,算法

ACM,算法 描述 最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少? 输入 有多组测试数据.第一行一个整数n,表示有n组测试数据.接下来的每行有一个整数m. 输出 输出第m个小光棍数. 样例输入 1 1 样例输出 471 #include <iostream> #include <strin