专栏文章

CSP2024 游记

生活·游记参与者 7已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
7 条
当前快照
1 份
快照标识符
@mhza6qp6
此快照首次捕获于
2025/11/15 03:58
4 个月前
此快照最后确认于
2025/11/29 04:49
3 个月前
查看原文

rp++

保龄寄(确信

初赛

Day 1

别问之前为什么没写,问就是电脑被收了qwq。

上午J组

原本不想报的,但是老师要求全都要报,只能给CCF捐50了(悲
开考,直接乱选,毕竟去年已经J1=了,进不进无所谓(不想再给CCF捐钱了)。
T3组合数学,先跳过。
格雷码是什么东西???T4蒙A。
又考先中后序遍历啊啊啊不会啊啊啊,T12蒙C。
阅读程序被T22秒了,RE不是编译错误!!!
答案没记,至少错一题。
完善程序第一题第一小题就错啊啊啊我是**。
第二题没看,全蒙的C
出来对答案,完善程序第二题答案是BBBBC,五错四!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
趋势。。。。。。
估分连八十都没上。。。
没关系当加rp了。

下午S组

中午喝了咖啡。
好难,心态炸了,全蒙错。
估分42.5。

Day 10

出分数线,用老人机查的。
J 76,过了。
S 45!!!!!!!!!!!!!!!!!!
就差2.5!!!!!!!!!!!!!!!!
要是不蒙D或不蒙×就过了……
没关系,明年再来!

复赛

Day 0

板子都没背啊啊啊。

Day 1

上午J组

T1水题判重即可,T2小模拟,还读错题了。。。
T3发现没有大样例,感觉可能是因为答案有规律。玄学做法。
T4没看。
玩小恐龙,5006分。
估分 [230,300][230,300]

中午吃饭

没去食堂,怕没开,去吃寿司,花38,贵死。。。

下午S组

我是用奖励名额的**。
好紧张啊啊啊。
开题看T1直接懵,比去年T1还简单???五分钟做完。
T2乱口胡了一下,感觉可做,直接死磕。
二分,二分,二分,二分。
一通乱搞,过了前四个样例。
去厕所找灵感,好像知道错哪了,赶紧回去写。
又一通乱搞,码风良好,但是可能只有自己读得懂。
过所有样例,但是样例五3.2s,时限2s,有点慌。
想到之前用这台电脑跑 O(n),n=106O(n),n=10^6 超时,心情好点。
然后没时间看T3和T4了。。。
估分 [100,200][100,200]

晚上讨论

听说T2没判断ans1为0会20???

Day 2

测民间,S 200!!!
但是T2好像被hack了,不管了,赌一手CCF数据强度。

Day 3

听说J估分290,FJ省200名开外了。。。不知道能不能一等,当然不拿也行。
S T2还是没调出来,炸了。

Day 不知道多少

双1=,六级勾。

代码:

CSP-J

poker

CPP
#include <bits/stdc++.h>

using namespace std;

bool p[10][30];

int qwq1(char c) {
	if (c == 'D') return 1;
	if (c == 'C') return 2;
	if (c == 'H') return 3;
	if (c == 'S') return 4;
}

int qwq2(char c) {
	if (c == 'A') return 1;
	if (c == '2') return 2;
	if (c == '3') return 3;
	if (c == '4') return 4;
	if (c == '5') return 5;
	if (c == '6') return 6;
	if (c == '7') return 7;
	if (c == '8') return 8;
	if (c == '9') return 9;
	if (c == 'T') return 10;
	if (c == 'J') return 11;
	if (c == 'Q') return 12;
	if (c == 'K') return 13;
	
}

int main() {
 	freopen("poker.in", "r", stdin);
 	freopen("poker.out", "w", stdout);
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		char a, b;
		cin >> a >> b;
		p[qwq1(a)][qwq2(b)] = 1;
	}
	int ans = 0;
	for (int i = 1; i <= 4; i++) {
		for (int j = 1; j <= 13; j++) {
			if (p[i][j] == 0) ans++;
		}
	}
	cout << ans << endl;
	return 0;
}

explore

CPP
#include <bits/stdc++.h>

using namespace std;

int n, m, k;
char Map[1005][1005]; 
bool zg[1005][1005];

struct node {
	int x, y;
};

void init() {
	for (int i = 0; i < 1005; i++) for (int j = 0; j < 1005; j++) {
		Map[i][j] = 0;
		zg[i][j] = 0;
	}
	return ;
}

node qwq(node a, int zx) {
	node res = a;
	if (zx == 0) res.y++;
	if (zx == 1) res.x++;
	if (zx == 2) res.y--;
	if (zx == 3) res.x--;
	return res;
}

bool ok(node a) {
	if (a.x < 1 || a.x > n || a.y < 1 || a.y > m) return 0;
	if (Map[a.x][a.y] == 'x') return 0;
	return 1;
}

int main() {
 	freopen("explore.in", "r", stdin);
 	freopen("explore.out", "w", stdout);
	int T;
	cin >> T;
	while (T--) {
		init();
		cin >> n >> m >> k;
		node xz;
		int d;
		cin >> xz.x >> xz.y >> d;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				cin >> Map[i][j];
			}
		}
		
		zg[xz.x][xz.y] = 1;
		while (k--) {
			node res;
			res = qwq(xz, d);
			if (ok(res)) {
				xz = res;
				zg[xz.x][xz.y] = 1;
			}
			else {
				d = (d + 1) % 4;
			} 
		}
		int ans = 0;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				ans += zg[i][j];
			}
		}
		cout << ans << endl;
	}
	return 0;
}

sticks

CPP
#include <bits/stdc++.h>

using namespace std;

string ans;

int main() {
 	freopen("sticks.in", "r", stdin);
 	freopen("sticks.out", "w", stdout);
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		if (n == 1) {
			cout << -1 << endl;
			continue;
		}
		if ((n % 7) == 0) {
			for (int i = 1; i <= n / 7; i++) cout << 8;
			cout << endl;
			continue;
		}
		if (n == 10) {
			cout << 22 << endl;
			continue;
		}
		while (n > 14) {
			n -= 7;
			if (n != 10) ans = ans + "8";
		}
		if (n == 2) ans = "1" + ans;
		if (n == 3) ans = "7" + ans;
		if (n == 4) ans = "4" + ans;
		if (n == 5) ans = "2" + ans;
		if (n == 6) ans = "6" + ans;
		if (n == 7) ans = "8" + ans;
		if (n == 8) ans = "10" + ans;
		if (n == 9) ans = "18" + ans;
		if (n == 10) ans = "200" + ans;
		if (n == 11) ans = "20" + ans;
		if (n == 12) ans = "28" + ans;
		if (n == 13) ans = "68" + ans;
		if (n == 14) ans = "88" + ans;
		cout << ans << endl;
		ans = "";
	}
	return 0;
} 

CSP-S

duel

CPP
#include <bits/stdc++.h>

using namespace std;

int in;
int cnt[100005];

int main() {
 	freopen("duel.in", "r", stdin);
 	freopen("duel.out", "w", stdout);
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> in;
		cnt[in]++;
	}
	int ans = 0;
	for (int i = 1; i <= 100000; i++) {
		if (cnt[i] >= ans) ans = cnt[i];
	}
	cout << ans << endl;
	return 0;
} 

detect

CPP
#include <bits/stdc++.h>

using namespace std;

long long n, m, l, v;
struct node {
	long long d, v, a;
}c[100005];
long long p[100005];
long long cs[100005];

struct qj {
	long long l, r;
}q[100005], fq[100005];
long long top, top2;

long long Min[100005];
long long b[1000005], qh[1000005];
long long cf[1000005];

void init() {
	top = 0;
	top2 = 0;
	for (long long i = 0; i < 100005; i++) {
		cs[i] = 0;
		q[i].l = 0;
		q[i].r = 0;
		fq[i].l = 0;
		fq[i].r = 0;
		Min[i] = 0;
	}
	for (long long i = 0; i < 1000005; i++) {
		b[i] = 0;
		qh[i] = 0;
		cf[i] = 0;
	}
	return ;
} 

long long B_S1(long long l, long long r, long long qwq) {//找距qwq点正方向最近的测速仪 
	if (l == r) return l;
	long long mid = (l + r) / 2;
	if (p[mid] >= qwq) return B_S1(l, mid, qwq);
	else return B_S1(mid + 1, r, qwq);
} 

long long B_S2(long long l, long long r, long long qwq) {
	if (l == r) return l;
	long long mid = (l + r) / 2;
	if (c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) > v * v) return B_S2(l, mid, qwq);
	else return B_S2(mid + 1, r, qwq);
}

long long B_S3(long long l, long long r, long long qwq) {
	if (l == r) return l;
	long long mid = (l + r + 1) / 2;
	if ((c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) <= v * v) || (c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) < 0)) return B_S3(l, mid - 1, qwq);
	else return B_S3(mid, r, qwq);
}

bool cmp(qj a, qj b) {
	if (a.l != b.l) return a.l < b.l;
	return a.r > b.r;
}

long long B_S4(long long l, long long r, long long qwq) {
	if (l == r) return l;
	long long mid = (l + r + 1) / 2;
	if (cf[mid] <= qwq) return B_S4(mid, r, qwq);
	else return B_S4(l, mid - 1, qwq);
}

int main() {
 	freopen("detect.in", "r", stdin);
 	freopen("detect.out", "w", stdout);
	long long T;
	cin >> T;
	while (T--) {
		init();
		
		scanf("%lld %lld %lld %lld", &n, &m, &l, &v);
		for (long long i = 1; i <= n; i++) {
			scanf("%lld %lld %lld", &c[i].d, &c[i].v, &c[i].a);
		}
		for (long long i = 1; i <= m; i++) scanf("%lld", &p[i]);
		long long cnt = 0;
		for (long long i = 1; i <= n; i++) {
			if (p[m] < c[i].d) continue;
			if (c[i].a > 0) {
				if (c[i].v * c[i].v + 2 * c[i].a * (p[m] - c[i].d) > v * v) {
					cs[++cnt] = i;
				}
			}
			if (c[i].a == 0) {
				if (c[i].v > v) cs[++cnt] = i;
			}
			if (c[i].a < 0) {
				long long res = B_S1(1, m, c[i].d);
				if (c[i].v * c[i].v + 2 * c[i].a * (p[res] - c[i].d) > v * v) {
					cs[++cnt] = i;
				}
			}
		}
		cout << cnt << ' ';
		
		
		long long Max = -1;
		for (long long awa = 1; awa <= cnt; awa++) {
			long long i = cs[awa];
			if (c[i].a >= 0) {
				long long qd = B_S1(1, m, c[i].d);
				long long res = B_S2(qd, m, i);
				Max = max(Max, res);
			}
			else {
				long long l = B_S1(1, m, c[i].d);
				long long r = B_S3(l, m, i);
				q[++top].l = l;
				q[top].r = r;
			}
		}
		if (Max != -1) {
			q[++top].l = Max;
			q[top].r = m;
		}
		sort(q + 1, q + top + 1, cmp);
		Min[top + 1] = 2147483647;
		for (long long i = top; i >= 1; i--) Min[i] = min(Min[i + 1], q[i].r);
		for (long long i = 1; i <= top; i++) {
			if (q[i].r >= Min[i + 1]) continue;
			fq[++top2] = q[i];
		}
		
		
//		if (T == 16) for (long long i = 1; i <= top2; i++) cout << "qwq   " << fq[i].l << ' ' << fq[i].r << endl;
		
		
		for (long long i = 1; i <= top2; i++) {
			b[fq[i].r]++;
		}
		qh[0] = 0;
		for (long long i = 1; i <= p[m]; i++) {
			qh[i] = qh[i - 1] + b[i];
		}
		long long pl = 0;
		for (long long i = 1; i <= top2; i++) {
			long long res = B_S4(0, pl, fq[i].l - 1);
			//////////////
			if (qh[fq[i].r] - (pl - res) - qh[fq[i].l - 1] > 1) {
				cf[++pl] = fq[i].r;
//				cout << "1111    " << fq[i].l << ' ' << fq[i].r << "    1111" << endl;
			}
		}
		cout << m - (qh[p[m]] - pl) << endl;
	}
	return 0;
} 

/*
1
5 5 15 3
0 3 0
12 4 0
1 1 4
5 5 -2
6 4 -4
2 5 8 9 15

3 3
*/

评论

7 条评论,欢迎与作者交流。

正在加载评论...