A.Primary Task(模拟)
题意:
德米特里在黑板上写下了 t t t个整数,这很好。他肯定自己丢失了其中一个重要的整数 n n n,这就不好了。
整数 n n n的形式是 10 10 10 ^
x x x( x ≥ 2 x\ge 2 x≥2),其中符号"^"
表示指数化。出了点差错,德米特里在写重要整数时漏掉了符号"^"
。例如,他应该写 105 105 105而不是 1 0 5 10^5 105,应该写 1019 1019 1019而不是 1 0 19 10^{19} 1019。
德米特里想知道黑板上的整数哪些可能是重要整数,哪些不可能。
分析:
判断一下字符串前两位是不是10
,除去前两位后后面的部分是不是一个大于等于2
的数即可。
代码:
#include<bits/stdc++.h>
using namespace std;
void solve() {
string s;
cin >> s;
if (s.length() <= 2) {
cout << "NO" << endl;
return;
}
if (!(s[0] == '1' && s[1] == '0')) {
cout << "NO" << endl;
return;
}
if (s[2] == '0') {
cout << "NO" << endl;
return;
} else if (s[2] == '1') {
if (s.length() == 3) {
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
}
int main() {
int T;
cin >> T;
while (T--) {
solve();
}
return 0;
}
B.Seating in a Bus(模拟)
题意:
在伯兰,一辆公共汽车由一排从 1 1 1到 n n n的 n n n个座位组成。乘客上车时请务必遵守这些规则:
- 如果车上没有空座位,乘客可以坐在任何空座位上;
- 否则,乘客应坐在至少有一个邻座空闲的座位上。换句话说,只有当 i − 1 i-1 i−1或 i + 1 i+1 i+1中至少有一个座位有人时,乘客才能坐在索引为 i i i( 1 ≤ i ≤ n 1\le i\le n 1≤i≤n)的座位上。
今天有 n n n位乘客上车。数组 a a a按时间顺序记录了他们的座位号。也就是说, a 1 a_1 a1包含了第一位乘客的座位号, a 2 a_2 a2-第二位乘客的座位号,以此类推。
你知道数组 a a a的内容。确定是否所有乘客都遵循了建议。
例如,如果 n = 5 n=5 n=5和 a a a=[ 5 , 4 , 2 , 1 , 3 5,4,2,1,3 5,4,2,1,3],那么建议就没有被遵守,因为第 3 3 3个乘客坐在了座位号为 2 2 2的座位上,而相邻的座位号为 1 1 1和 3 3 3的座位是空闲的。
分析:
按题意模拟 ,每次判断相邻位置是否有乘客,如果都没有,那么返回false
, 否则置 a [ x ] = 1 a[x]=1 a[x]=1, 继续判断下一个。
代码:
#include<bits/stdc++.h>
using namespace std;
void solve() {
int n;
cin >> n;
vector<int> a(n + 2, 0);
bool tag = true;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
if (i == 1) {
a[x] = 1;
continue;
} else {
if (a[x - 1] == 1 || a[x +