有点数学场的感觉
讲解 讲解
A题
考点:语法
直接根据条件判断就行
a, b = map(int, input().split())
if a > b:
print('kou')
elif a == b:
print('draw')
else:
print('yukari')
B题
考点:语法
主要就是考虑一下四种情况,白天睡/不睡 * 晚上睡/不睡,然后白天不睡晚上睡这种情况特殊处理一下(就是题面所说的提前)
n = int(input())
a = list(input())
b = list(input())
ans = 0
for i in range(n):
if a[i] == 'Y':
if b[i] == 'Y':
ans += 3
else:
ans += 2
else:
if b[i] == 'Y':
ans += 2
else:
ans += 0
print(ans)
C题(双解)
考点:字符串 / 类哈希
解法1:字符串查找替换
解法2:记录每个字符次数,输出小红之后减掉对应次数,然后把其它有次数的输出一遍
C1.Python
# 利用字符串操作函数完成:1先找小和红 2替换小和红 3输出小红+替换之后的字符串
# 12在python中可以一步完成
def reset(s):
# 查找并替换小和红
s = s.replace('xiao', '', 1)
s = s.replace('hong', '', 1)
ans = 'xiaohong' + s
return ans
s = input()
print(reset(s))
# 也可以试试 查找 >> 切片 >> 替换 >> 输出的写法
C2.C++
// Python还在学,暂时用C++顶一下
#include<bits/stdc++.h>
using namespace std;
// 用这个去记录每个字符的出现次数
int cnt[26];
int main()
{
string s;
cin >> s;
// 记录次数
for(auto i : s)
cnt[i - 'a']++;
string ss = "xiaohong";
// 删除xiaohong
for(auto i : ss)
cnt[i - 'a']--;
// 开始输出
cout << "xiaohong";
for(int i = 0; i < 26; ++i)
while(cnt[i]--)
cout << char('a' + i);
return 0;
}
D题(双解)
考点:数学、排序、构造
解法1:一定要找规律(也就是删除一个数中位数会如何变化),会发现当n为奇数偶数时对应两种不同的情况,把两种情况都分析一下,根据位置求答案(模拟写的话会超时)
解法2:利用结构体保存位置后对值排序,遍历排序后的数组根据保存的位置构造出答案(也要用规律),最后输出答案(比赛的时候写的,可能有点绕,推荐解法1)
D1.Python
n = int(input())
l1 = list(map(int, input().split()))
# 利用切片复制一份列表用来排序
l2 = l1[::]
l2.sort()
# 开一个列表用来保存答案
ans = []
# 把答案找齐
if n % 2 == 0:
ans.append(l2[n // 2 - 1])
ans.append(l2[n // 2])
if n % 2 != 0:
ans.append(l2[n // 2 - 1])
ans.append(l2[n // 2])
ans.append(l2[n // 2 + 1])
for i in l1:
if n % 2 == 0:
if i <= min(ans):
print('{:.1f}'.format(max(ans)))
else:
print('{:.1f}'.format(min(ans)))
if n % 2 != 0:
if i <= min(ans):
print('{:.1f}'.format((ans[1] + ans[2]) / 2))
elif i>=max(ans):
print('{:.1f}'.format((ans[1] + ans[0]) / 2))
else:
print('{:.1f}'.format((ans[0] + ans[2]) / 2))
D2.C++
#include<bits/stdc++.h>
using namespace std;
struct aa{
double v;
int s;
};
bool cmp(aa x, aa y)
{
if(x.v != y.v)
return x.v < y.v;
else
return x.s < y.s;
}
const int N = 2e5 + 10;
aa a[N];
double b[N];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> a[i].v;
a[i].s = i;
}
sort(a + 1, a + n + 1, cmp);
// 偶数情况
if(n % 2 == 0)
{
int r = a[n / 2 + 1].v;
int l = a[n / 2].v;
for(int i = 1; i <= n; ++i)
{
if(i <= n / 2)
b[a[i].s] = r;
else
b[a[i].s] = l;
}
for(int i = 1; i <= n; ++i)
{
cout << fixed << setprecision(1) << 1.0 * b[i] << '\n';
}
}
// 奇数情况
else
{
double r = (a[n / 2 + 1].v + a[n / 2 + 2].v) / 2;
double l = (a[n / 2 + 1].v + a[n / 2].v) / 2;
double mid = (a[n / 2 + 2].v + a[n / 2].v) / 2;
for(int i = 1; i <= n; ++i)
{
if(i < n / 2 + 1)
b[a[i].s] = r;
else if(i == n / 2 + 1)
b[a[i].s] = mid;
else
b[a[i].s] = l;
}
for(int i = 1; i <= n; ++i)
{
cout << fixed << setprecision(1) << 1.0 * b[i] << '\n';
}
}
return 0;
}
E题(思路)
首先把所有的素因子拆出来,然后判断有无解构造输出,细节推荐看一下讲解视频