Petrozavodsk Winter-2019. Japanese Contest-A.Digits Are Not Just Characters(模拟)
Problem A. Digits Are Not Just Characters
AOJ 1389:题面链接
题意:
给出初始字符串s0,然后给出N个询问,数字比字母小,两个字母间按照ascii码比较,两个十进制数字则按照大小排序。如果当前字符串按照此规则比s0小输出-,否则输出+;
思路:按照题意模拟,数字按照十进制存起来,比较大小就可
code:
//yyh
#include <iostream>
#include <cstring>
#include<cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <ctime>
#include <cstring>
#include <cmath>
#include <stack>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define ll long long
#define rep(i, n) for(ll i=0;i<n;i++)
#define per(i, n) for(int i=n;i>=0;i--)
#define rep2(i, n) for(ll i=1;i<=n;i++)
#define pb(x) push_back(x)
#define clint(x, n) memset(x,n,sizeof(x))
#define mp make_pair
#define fi first
#define se second
#define IO std::ios::sync_with_stdio(false)
#define ull unsigned long long
#define ud long double
#define pii pair<int,int>
#define random(x) (rand()%x)
using namespace std;
const ll inf = 0x3f3f3f3f;
const int mod = 998244353;
const int MAX = 123123;
const int N = 555;
const double eps = 1e-6;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
inline ll read1() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
ll max(ll a, ll b) {
if (a > b) return a;
return b;
}
ll min(ll a, ll b) {
if (a < b) return a;
return b;
}
ll multi(ll a, ll b, ll p) //蹇€熶箻
{
ll ans = 0;
while (b) {
if (b & 1LL) ans = (ans + a) % p;
a = (a + a) % p;
b >>= 1;
}
return ans;
}
ll pow_mod(ll a, ll b, ll p) {
ll ans = 1;
while (b) {
if (b & 1LL) ans = multi(ans, a, p);
a = multi(a, a, p);
b >>= 1;
}
return ans;
}
int qpow(int a, int b) {
int ans = 1, base = a;
while (b != 0) {
if ((b & 1) != 0)
ans *= base;
base *= base;
b >>= 1;
}
return ans;
}
int lowbit(ll x) {
return x & (-x);
}
int gcd(int a, int b) {
return b > 0 ? gcd(b, a % b) : a;
}
const int maxn = 1e3 + 5;
//**************************************
bool cmp(string x, string y) {
int i = 0, j = 0,p,q;
string x1, y1;
while (i < x.size() && j < y.size()) {
p = 0, q = 0;
x1 = "", y1 = "";
int b;
if (isdigit(x[i])) {
b = 1;
while (isdigit(x[i])) {
x1 += x[i];
i++;
}
int l = x1.size();
for (int k = l - 1; k >= 0; k--) {
p += (x1[k] - '0') * b;
b *= 10;
}
x1 = "";
} else if (x[i]>='A'&&x[i]<='z') {
while (x[i]>='A'&&x[i]<='z') {
x1 += x[i];
i++;
}
}
if (isdigit(y[j])) {
b = 1;
while (isdigit(y[j])) {
y1 += y[j];
j++;
}
int l = y1.size();
for (int k = l - 1; k >= 0; k--) {
q += (y1[k] - '0') * b;
b *= 10;
}
y1 = "";
} else if (y[j]>='A'&&y[j]<='z') {
while (y[j]>='A'&&y[j]<='z') {
y1 += y[j];
j++;
}
}
if (p != 0 && q != 0) {
if (p > q)
return true;
else if (p == q)
continue;
else
return false;
}
if (!x1.empty()) {
if (!y1.empty()) {
if (x1 > y1)
return true;
else if (x1 == y1)
continue;
else
return false;
}
}
if (!x1.empty() && q != 0)
return true;
if (!y1.empty() && p != 0)
return false;
}
if (i >= x.size() && j >= y.size())
return false;
if (i < x.size())
return true;
if (j < y.size())
return false;
}
int main() {
IO;
int n;
cin >> n;
string s0;
cin >> s0;
string si;
rep2(i,n) {
cin >> si;
if (cmp(s0, si))
cout<<'-'<<endl;
else
cout<<'+'<<endl;
}
return 0;
}