A - Digits Are Not Just Characters
大模拟,思维
周周练
好有意思的一道题,当时下午在健身,然后一堆人在网上表示这个题做不出来,晚上来做了一下果然题都读不懂
可恶
不过,读懂了就好做了
- 题意:给你一个标版字符串,以及n个比较字符串,标版字符串与每个比较字符串比较,前者大输出-,否则输出+(包括相等)。
大小比较要求:
- 数字在字符前面
- 全是字符则ascii
- 数字则比较数字块的值大小
- 思路:数字比较是分块,就把每个字符串的数字块大小分开出来,同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;
}