The 14th Chinese Northeast Collegiate Programming Contest部分题解

题目ABCDEFGHIJKL
solved-🚫🚫---🚫--

✔:比赛时通过;🚫:赛后通过;⚪:比赛时尝试了未通过;-:比赛时未尝试

这一场比赛是我们队伍队内自己第一次打的训练赛。配合的不是很到位,因为也没打过几场团体赛,平时训练都是自己打自己的。
总体来说队友很强,就是我一个人在拖后腿,我只配做签到题,要努力变强啊,呜呜呜。(by kitalekita)

B:Team

C.Fall Guys(模拟)
补题ac
这道题的大致意思就是前几个月比较火的游戏糖豆人改变过来的一道题目,就是跳高摸皇冠,皇冠会在[0,H]之间来回移动速度为1,然后当皇冠处于h以下(包含h),就可以拿到皇冠,输出谁先拿到皇冠,这里要注意有网络延迟,就是有可能先起跳的不一定是冠军。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int N = 1e6 + 100;
#define inf 0x3f3f3f3f
int arr[N];
int del[N];
int check[N];
void solve() {
	int n, h, H;
	scanf("%d %d %d", &n, &h, &H);
	for (int i = 1;i <= n;i++)scanf("%d", &arr[i]);
	for (int i = 1;i <= n;i++)scanf("%d", &del[i]);
	int c1 = (H - h) * 2 - 1;
	int c2 = h * 2 + 1;
	memset(check, 0, sizeof check);
	for (int i = 0;i <= h;i++)check[i] = 1;
	int flag = 1;
	int st = h + 1;
	while (1) {
		if (flag) {
			for (int i = st;i <= st + c1 - 1;i++) check[i] = 0;
			st = st + c1;
			if (st > 3e5)break;
		}
		else {
			for (int i = st;i <= st + c2 - 1;i++) check[i] = 1;
			st = st + c2;
			if (st > 3e5)break;
		}                                                                                                                                                                                                                                                                          
		flag ^= 1;
	}
	//for (int i = 0;i <= 100;i++)cout << i << "=" << check[i] << endl;
	int minn = inf;
	int ans = -1;
	for (int i = 1;i <= n;i++) {
		for (int j = arr[i];;j++) {
			if (check[j]) {
				if (j + del[i] < minn) {
					minn = j + del[i];
					ans = i;
				}
				break;
			}
		}
	}
	printf("%d\n", ans);
}
int main() {
	int  T;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

一开始这道题我们在讨论这个“below”是小于等于还是小于,因为我们看了下翻译是小于的意思,然而这道题是小于等于的意思,而且这道题感觉题目意思没有写的很清,做的很烦,然后这道题在训练的时候一直wa,然后在补题的时候发现是数组越界(因为当时我们一直认为是有样例没有考虑清楚,所以导致wa in 2,我们一致认为数组越界是RE,然后队友补题的时候,敲了份ac的代码,发现是数组越界,),当时给我们队崩溃的,也当买了个教训,下次要注意一下,wa有可能是数组越界。

J.Color the blocks(签到,思维)
solved by kitalekita
J题的大致意思就是给你N * N块方格的网格图,每块方格可以涂黑和白两种颜色,其中如果(x,y)涂了颜色以后, (x−3,y),(x−1,y+2),(x+1,y+2),(x+3,y)的颜色不能够与(x,y)的颜色相同,问你N * N个网格图一共有几种涂法?
这道题就是在纸上画一下图,画出 1 * 1,2 * 2,3 * 3,4 * 4,5 * 5 大小的网格图,先规定一个方块的颜色,然后去涂,最后发现1 * 1的时候方法为2,2 * 2的时候方法为16,3 * 3 的时候方法为32,4 * 4 ,5 * 5都是4个,发现4个以上,都是只能是4种方法。因此答案出来了。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		if(n==1)puts("2");
		else if(n==2)puts("16");
		else if(n==3)puts("32");
		else if(n>=4)puts("4");
	}
}

这道题 在 a 之前wa了一次,因为我还以为3的时候与4,5一样,然后wa了之后发现不对,以后做题要考虑清楚再交,呜呜呜。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值