文章目录
比赛分析
发现的经典的一句话:
三人同演一场戏,不知已是戏中人–来自知乎的某位博主
大佬的分析:一个链接通向知乎
本博主的分析:我们打的重现赛。这场比赛是4题从铁到金,换句话说只要5题稳拿金。可惜我们是铁锈。本场比赛的难易程度特别明显!不过能打final的队伍真的强。对于比赛题目而言,最离谱就是J题,六页模拟拿来放AK(对此我表示很赞)!但是能过的四个题里存在一道树上启发式合并……只能说现在的我们太菜了,这东西不会啊。总体看这场比赛题的目,难度还是不小的(因为我现在菜的很),不过感觉这套题挺好的(除了J)现在收拾它很费劲,以后就好了。
本场比赛题倒是读的差不多了,但没补几个。
题目分析
A题:Kick Start
题型:模拟(属实是不知道这属于啥了)
题目大意:给出每年的几场比赛时间和今天的时间,输出下一场比赛是什么时候。
思路:筛选这写就行,注意“21st”、“22nd”等
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
map<string, int> mouth;
map<int, string> mouth_tran;
map<string, int> day;
map<int ,string> day_tran;
set<pair<int,int> >ans;
void init()//打表无敌,<将月份,天数打表即可>
{
mouth["Jan"] = 1; mouth_tran[1] = "Jan";
.
.
.
day["31st"] = 31; day_tran[31] = "31st";
}
int main()
{
init();
int T;cin >> T;
for(int Case = 1; Case <= T; Case ++)
{
ans.clear();
int n;scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
string s,d;
cin >> s >> d;
ans.insert({mouth[s],day[d]});
}
string st,da;
cin >> st >> da;
int M = mouth[st], D = day[da], flag = 1;
cout << "Case #" << Case << ": ";
for(auto it = ans.begin();it != ans.end(); it++)
{
pair<int,int> p = *it;
if(p.first == M)
{
if(p.second > D)
{
flag = 0;
cout << mouth_tran[p.first] << " " << day_tran[p.second] << endl;
break;
}
}
if(p.first > M)
{
flag = 0;
cout << mouth_tran[p.first] << " " << day_tran[p.second] << endl;
break;
}
}
if(flag)cout << "See you next year" << endl;
}
return 0;
}
B题:Infimum of Paths
题型:图论
题目大意:n个点,m条边。设某条边为
e
i
e_i
ei,权值为
w
e
i
w_{e_i}
wei,则从u到v的路径
l
e
x
(
p
)
lex(p)
lex(p)满足
l
e
x
(
p
)
=
l
e
x
(
[
e
1
,
e
2
⋯
,
e
k
]
)
=
∑
i
=
1
k
1
0
−
i
w
e
i
lex(p) = lex([e_1,e_2 \cdots ,e_k]) = \sum_{i=1}^{k}10^{-i}w_{e_i}
lex(p)=lex([e1,e2⋯,ek])=i=1∑k10−iwei
从0到1的路径的最小值
C题:Mr. Panda and Typewriter
题型:字符串(初步判断)
题目大意:构造出一个串,在结尾添加任意字符串花费x单位时间,Ctrl+C花费y单位时间、Ctrl+V花费z单位时间。求构造一个串的最小花费时间T。
D题:Pulse Nova
题型:几何问题
题意:存在n条直线,有一个半径为R的圆,找到一个这个圆的位置,使直线被圆所截的线段总长最大,求最大值。
E题 Non-Maximum Suppression
题型:思维题
题意:有n个大小相同的正方形(含权值),一个threshold,优先选择权值最大的正方形。如果要选择的正方形和选中的正方形的 I o U ≤ t h r e s h o u l d IoU \leq threshould IoU≤threshould则选中。求选中的个数和编号。
F题:Ferry
题型:思维
题意:(未知)
G题:Game on the Tree
题型:博弈论(一眼博弈,还需要树上操作、DP等)
题目大意:有硬币在节点1处,双方玩家在树上跳硬币,要求这一步跳的距离要比上一步大(第一步除外)不能跳的一方输。求,有多少种字树可以使后手胜出。
H题 Mr. Panda and SAD
题型:字符串疲惫
题目大意:给n个串,任意拼成一个,求出现的“SAD”最多有多少个。
I题:Mr. Panda and Blocks
题型:构造
题目大意:有n种颜色,n*(n+1)/2种方块(每种只有一个)用这些方块拼成一个颜色相连,方块相连的城堡。输出地形图
思路:可以向高处叠层数所以:eg:n = 4
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int T;scanf("%d",&T);
for(int Case = 1; Case <= T; Case ++)
{
int n;scanf("%d",&n);
printf("Case #%d:\nYES\n",Case);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
printf("%d %d %d %d %d %d %d %d\n",j,i,j,1,n-i,j,2,n-i);
}
return 0;
}
J题:Wire-compatible Protocol buffer
题型:模拟
题目大意:都在这了
K题:Russian Dolls on the Christmas Tree
题型:树上启发式和并
题目大意:一棵树上有n个节点,1为根节点。选择一个节点,则以该节点为根的子树都会被选中,求选择第i个节点后,被选择的点构成的连续区间有多少个。i从1取到n,输出所有值。
L题:Spiral Matrix
题型:规律题
题目大意:在n*m的矩阵中,选择某一点为起点,可以直走,可以向右走,每个格子只需走一次。问有多少种方法可以全走完。
思路:深搜打表打表找规律(应该能推出来)