2019 CCPC final


比赛分析

发现的经典的一句话:

三人同演一场戏,不知已是戏中人–来自知乎的某位博主

大佬的分析:一个链接通向知乎

本博主的分析:我们打的重现赛。这场比赛是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=1k10iwei
从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 IoUthreshould则选中。求选中的个数和编号。

请添加图片描述

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的矩阵中,选择某一点为起点,可以直走,可以向右走,每个格子只需走一次。问有多少种方法可以全走完。

思路:深搜打表打表找规律(应该能推出来)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值