天梯赛的分别记录,根据我的能力持续更新
这是我第一次打天梯赛,作为一个大学生才进入ACM,分数实属有点拉跨,但是没事,我还可以往死里搞,希望在我全心准备考研之前能够得到我想要的答案。
L1
L1-1 嫑废话上代码
这道题就不用写题解了,直接输出就可以拿到5分惹
L1-2 猫是液体
这道题,输入三个数,然后输出三个数的乘积。也就是计算一个长方体的体积,因为猫是液体。
L1-3 洛希极限
这道题的题面很复杂,但是实际上做起来其实很简单,有的朋友总是差一分,但是我也不知道那个一分,差在哪。
给了我们三个数字,但是其实我们只需要计算一步,然后比较一下,就可以了。
#include <bits/stdc++.h>
#define ppp(a) printf("%.2lf ",a);
using namespace std;
int main() {
double a, b, c;
cin >> a >> b >> c;
double x0 = 2.455;
double x1 = 1.26;
if (b == 0) {
if (a * x0 > c) {
ppp(a * x0);
cout << "T_T" << endl;
} else {
ppp(a * x0);
cout << "^_^" << endl;
}
} else {
if (a * x1 > c) {
ppp(a * x1);
cout << "T_T" << endl;
} else {
ppp(a * x1);
cout << "^_^" << endl;
}
}
return 0;
}
L1-4 调和平均
这道题,输入一个,求一个倒数,然后加上,最后求平均数,输出平均数地倒数。完事!
L1-5 胎压监测
用两个变量计算两种情况的个数;假如分别是a,b;如果a,b都为0,那么就是正常的,如果a + b = 1 就是第二种输出,记录下来,其他的都是第三种情况了。
L1-6 吃火锅
这道题刚开始我没拿到全部的分,现在想象自己真的哇是傻逼,在string 中有一个find函数,可以直接在字符串中找到是否有这个字符串。
大佬的string里的find方法详解传送门
#include <bits/stdc++.h>
using namespace std;
string st = "chi1 huo3 guo1";
string s;
int main() {
int hang = 0;
int cnt = 0;
int first = 0;
while (1) {
getline(cin, s);
if (s == ".") {
break;
}
hang++;
if (s.find(st) != -1) {
if (first == 0) x
first = hang;
cnt++;
}
}
cout << hang << endl;
if (first != 0) {
cout << first << " " << cnt << endl;
} else
cout << "-_-#" << endl;
return 0;
}
L1-7 前世档案
这道题,还是亭里普的,主要还是自己的思维没有达到那个程度,还需要锻炼。这个我们还是看了看大佬的解说,那么我们知道如果只选择一边我们只会有两个答案,那就是1 和 2n,所以我们可以推出来如果选择了一个,那么我们的边界就会移动。如果我们选择N,那么我们的右边界不会受影响,而左边界直接减少当前的一半,如果选择Y,那么左边界不变,右边界直接减少当前的一半。这也是二叉树的一个特性?我的树结构也没看懂,没事我再搞一次。
那么当前的一半,怎么获取呢,当然是用你的右边界-你的左边界 再 除以 2 拉!
接下来,看代码!
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
ll a, b;
cin >> a >> b;
string s;
int n = pow(2, a);
while (b--) {
cin >> s;
ll l = 1, r = n;
for (int i = 0; i < a; i++) {
if (s[i] == 'y')
r = l + (r - l) / 2;
else
l = r - (r - l) / 2;
}
cout << l << endl;
}
return 0;
}
L1-8 刮刮彩票
补这道题的时候,简直感觉自己是个傻逼,题意都不看清楚,还一直做,但是这都混了十多分,也是离谱。打天梯赛的时候,第一次我认为是加上所有翻开的,样例没过,那我再看,哦,发现只有后面的决定数字才加上,但是,这个时候我依然认为,只能加每一行每一列显现的数字,而且,他15和17 都是180,导致我一直以为我是对的,并且十分不理解为啥我没有拿完。
现在才知道,原来就是加上某一行的值对比打表,呜呜呜呜呜呜呜呜呜呜呜!(打比赛一定要细心)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[4][4];
int aa, bb;
int main() {
int x, y;
int sum;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j < 4; j++) {
cin >> a[i][j];
if (a[i][j] == 0) {
x = i;
y = j;
}
sum += a[i][j];
}
}
a[x][y] = 45 - sum;
// cout << a[x][y];
for (int i = 0; i < 3; i++) {
cin >> aa >> bb;
cout << a[aa][bb] << endl;
}
int t;
int ans = 0;
cin >> t;
if (t <= 3)
ans = a[t][1] + a[t][2] + a[t][3];
else if (t <= 6)
ans = a[1][t - 3] + a[2][t - 3] + a[3][t - 3];
else if (t == 7)
ans = a[1][1] + a[2][2] + a[3][3];
else
ans = a[1][3] + a[2][2] + a[3][1];
switch (ans) {
case 6:
cout << 10000 << endl;
break;
case 7:
cout << 36 << endl;
break;
case 8:
cout << 720 << endl;
break;
case 9:
cout << 360 << endl;
break;
case 10:
cout << 80 << endl;
break;
case 11:
cout << 252 << endl;
break;
case 12:
cout << 108 << endl;
break;
case 13:
cout << 72 << endl;
break;
case 14:
cout << 54 << endl;
break;
case 15:
cout << 180 << endl;
break;
case 16:
cout << 72 << endl;
break;
case 17:
cout << 180 << endl;
break;
case 18:
cout << 119 << endl;
break;
case 19:
cout << 36 << endl;
break;
case 20:
cout << 306 << endl;
break;
case 21:
cout << 1080 << endl;
break;
case 22:
cout << 144 << endl;
break;
case 23:
cout << 1800 << endl;
break;
case 24:
cout << 3600 << endl;
break;
}
return 0;
}
L2
L2-1 简单计算器
这是一个后缀表达式,你用栈可以,用数组也可以,把数组倒过来直接覆盖就可以模拟栈拉!
废话不多说,直接上代码!
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int fun(int x, int y, char t) {
int p;
if (t == '/')
p = x / y;
else if (t == '+')
p = x + y;
else if (t == '*')
p = x * y;
else if (t == '-')
p = x - y;
return p;
}
int main() {
stack<int> a;
stack<char> b;
int n;
cin >> n;
int num;
char ch;
for (int i = 0; i < n; i++) {
cin >> num;
a.push(num);
}
for (int i = 0; i < n - 1; i++) {
cin >> ch;
b.push(ch);
}
while (a.size() != 1) {
int aa = a.top();
a.pop();
int bb = a.top();
a.pop();
char cc = b.top();
b.pop();
if (aa == 0 && cc == '/') {
cout << "ERROR: " << bb << "/0" << endl;
return 0;
} else {
int dd = fun(bb, aa, cc);
a.push(dd);
}
}
cout << a.top();
return 0;
}
2020/12/2更新于此时