A. Masha and bears
题意
人的体积为\\(V\\),车的大小为\\(size\\),人能钻进车的条件是\\(V\\leq size\\),人对车满意的条件是\\(2V\\geq size\\).
现知道
- 熊爸爸能钻进最大的车并且满意
- 熊妈妈能钻进中等的车并且满意
- 熊宝宝能钻进最小的车并且满意
- Masha能钻进最小的车并且只对它满意
给定四人的体积(保证\\(V1\\gt V2\\gt V3\\)),要求给出三辆车的大小。
思路
考思维严谨性的题。// 还是有些怕的
假设三辆车大小分别为\\(a,b,c\\),则有
要满足上述条件,只需将最大的车和中等的车都取到最大值,最小的车取交集(如果没有的话则为-1)中的最小的值,再判断最小的点是否满足最后一个条件即可,不满足则为-1。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
int x1,x2,x3,x4;
scanf("%d%d%d%d", &x1,&x2,&x3,&x4);
int ans1 = 2*x1, ans2 = 2*x2, ans3;
if (x3 == x4) ans3 = x3;
else if (x3 > x4) {
if (x3 <= 2 * x4) ans3 = x3;
else ans3 = -1;
}
else {
if (x4 <= 2 * x3) ans3 = x4;
else ans3 = -1;
}
if (ans3==-1) puts("-1");
else {
if (2*x4<ans2) printf("%d\\n%d\\n%d\\n", ans1,ans2,ans3);
else puts("-1");
}
return 0;
}
B. Tic-Tac-Toe
水水的模拟...随便做...
顺带吐槽一波题面的英语水平...看样例猜题意...
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[20][20], ss[20];
int main() {
for (int i = 1; i <= 3; ++i) gets(s[i]+1);
gets(ss);
for (int i = 4; i <= 6; ++i) gets(s[i]+1);
gets(ss);
for (int i = 7; i <= 9; ++i) gets(s[i]+1);
int a,b;
scanf("%d%d", &a, &b);
int px = (a-1) % 3 + 1, py = (b-1) % 3 + 1;
int u = px*3-2, l = py*3-2+py-1;
bool flag = false;
for (int i = u; i < u+3; ++i) {
for (int j = l; j < l+3; ++j) {
if (s[i][j]==46) {
flag = true, s[i][j] = 33;
}
}
}
if (!flag) {
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= 11; ++j) if (s[i][j]==46) s[i][j] = 33;
}
}
for (int i = 1; i <= 3; ++i) puts(s[i]+1);
puts("");
for (int i = 4; i <= 6; ++i) puts(s[i]+1);
puts("");
for (int i = 7; i <= 9; ++i) puts(s[i]+1);
return 0;
}
C. Shockers
题意
游戏初始选定一个字母,选手要猜出这个字母是什么。
给出游戏进行的过程记录,包括三种格式:
- ". word":选手说出的单词中不包含该字母
- "! word":选手说出的单词中包含该字母
- “? letter”:选手猜了某一个字母,这个行为只在最后一次是正确的
在最后一次之前,每有一个\'!\'或\'?\',选手都会被电一次。
在某个时刻起,答案就唯一确定了,问从那个时刻起到最后,选手被电了多少次?
思路
也是直接模拟。
在到达唯一确定的时刻之前:
- 遇到\'!\':对目前可能的字母和这个word中的字母取个交集
- 遇到\'.\':对目前可能的字母和这个word中的字母取个差集
- 遇到\'?\':对目前可能的字母和这个letter取个差集
边做边记录当前有多少个可能的字母,一旦为1,则答案唯一确定。
一旦答案唯一确定了,接下来只需要统计有多少次不是\'.\'就电了多少次。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[100010];
bool ok[1010], exist[1010];
int main() {
int n;
scanf("%d", &n);
bool flag = false;
int cnt=0;
for (int i = \'a\'; i <= \'z\'; ++i) ok[i] = 1; int num = 26;
for (int i = 0; i < n; ++i) {
char ch;
scanf("\\n%c%s", &ch, s);
if (flag) {
if (ch != \'.\' && i != n-1) ++cnt;
}
else {
if (ch == \'!\') {
int len = strlen(s);
memset(exist, 0, sizeof exist);
for (int j = 0; j < len; ++j) exist[s[j]] = 1;
for (int j = \'a\'; j <= \'z\'; ++j) {
if (ok[j] && !exist[j]) --num, ok[j] = 0;
}
if (num == 1) flag = true;
}
else if (ch == \'.\') {
int len = strlen(s);
memset(exist, 0, sizeof exist);
for (int j = 0; j < len; ++j) exist[s[j]] = 1;
for (int j = \'a\'; j <= \'z\'; ++j) {
if (ok[j] && exist[j]) --num, ok[j] = 0;
}
if (num == 1) flag = true;
}
else if (ch == \'?\') {
if (ok[s[0]]) --num, ok[s[0]] = 0;
if (num == 1) flag = true;
}
}
}
printf("%d\\n", cnt);
return 0;
}
胡言乱语
应该是2017年的最后一场了。
接下来要好好复习(补天)准备期末考了。
今天这场...真是很曲折了...
睡到十点急急忙忙爬起来开电脑,错过了registration...
然后迷迷糊糊写了第一题,等到开始十分钟后的extra registration...一交就WA了...
因神志不清而隐隐的有些担心+慌张+迷茫 // 啥
然后A题WA了两发(...),B题WA了两发(没去掉freopen),C题WA了一发(少写一句话)
之后写E题写了四十分钟搜索...(躺倒 还没debug完毕...不知道啥时候再写了
竟然...涨了rating
好啦我的2017
出去的两场区域赛一直都想写博客来着然而太忙了什么的
cf一直写些没什么水平的题以及博客还为之浪费了不少时间
不啰嗦了睡觉了
希望我的期末一切顺利