A - Digits Are Not Just Characters

A - Digits Are Not Just Characters

大模拟,思维
周周练
好有意思的一道题,当时下午在健身,然后一堆人在网上表示这个题做不出来,晚上来做了一下果然题都读不懂
可恶
不过,读懂了就好做了

  • 题意:给你一个标版字符串,以及n个比较字符串,标版字符串与每个比较字符串比较,前者大输出-,否则输出+(包括相等)。
    大小比较要求:
  1. 数字在字符前面
  2. 全是字符则ascii
  3. 数字则比较数字块的值大小
  • 思路:数字比较是分块,就把每个字符串的数字块大小分开出来,同num[k]记录字符串下标k开头的数字块的大小,有点双指针的感觉。
    其他的挨个比较就好

我一般喜欢用string,但是char其实挺好用的,yysy

#include<cassert>
#include<string>
#include<cmath>
#include<cstring>
#include<stack>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<vector>
#include<cstdlib>
#pragma warning(disable:4996)
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f
#define itn int
#define ll long long
#define mes(a,k) memset(a,k,sizeof(a))
//#define max(a,b) a>b?a:b
//#define min(a,b) a<b?a:b
//#define pb(a) push_back(a)
#define eps 1e-9
#define PI acos(-1)
using namespace std;
const int N = 2e5 + 5;
const ll mod = 998244353;
char a[1002][11];//存储的字符串
int num[11];//原始字符串的分别数字大小
int mun[11];//每次比较的时候的字符串分别数字大小
void io() { ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); }
bool isChar(char x) {
	if ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z')) return 1;
	return 0;
}
int main() {
	io();
	int T;
	cin >> T;
	cin >> a[0];
	for (int i = 1; i <= T; i++) {
		cin >> a[i];
	}
	int len1 = strlen(a[0]);
	for (int i = 0; i < len1; i++) {
		int j = i;
		while (!isChar(a[0][i])&&i<len1) {
			
			num[j] = num[j] * 10 + a[0][i] - '0';
			i++;
		}
		
	}
	for (int i = 1; i <= T; i++) {
		int len2 = strlen(a[i]);
		mes(mun, 0);
		for (int k = 0; k < len2; k++) {
			int j = k;
			while (!isChar(a[i][k])&&k<len2) {
				mun[j] = mun[j] * 10 + a[i][k] - '0';
				k++;
			}
		}
		//cout << i << "=============" << endl;
		int p1 = 0, p2 = 0;
		while (p1 < len1 && p2 < len2) {
			char st = a[0][p1], ed = a[i][p2];
			if (!isChar(st) && isChar(ed)) {
				cout << "+" << endl;
				break;
			}
			if (isChar(st) && !isChar(ed)) {
				cout << "-" << endl;
				break;
			}
			else if (!isChar(st) && !isChar(ed)) {
				if (num[p1] > mun[p2]) {
					cout << "-" << endl;
					break;
				}
				else if (num[p1] < mun[p2]) {
					cout << "+" << endl;
					break;
				}
			}
			else {
				if (st > ed) {
					cout << "-" << endl;
					break;
				}
				if (st < ed) {
					cout << "+" << endl;
					break;
				}
			}
			p1++;
			p2++;
			if (p1 >= len1) {
				cout << "+" << endl;
			}
			else if (p2 >= len2) {
				cout << "-" << endl;
			}
			
		}
	}

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值