NOIP2024 游记

原文发布时间:2024-11-29 15:08。

Day -114514

听说自己S200好像能进NOIP了。

Day -1

去福州。

10:50在火车站集合,还以为是9:50。

找我妈要来了她不要的旧手机,这样就能开热点了。

去集合的路上看到空中飘来“雪花”,往上一看原来是有人刷墙,吃了一嘴墙灰。

发现没一个熟人。

集合后没多久就上火车了。

发现座位底下竟然没有充电口啊啊啊。

上洛谷。

灌水,晕晕晕晕晕。

靠背,颈椎痛痛痛。

进隧道,耳朵炸炸炸。

有点冷,鼻塞塞塞塞。

然后发现电脑没什么电了,只能关机。

三明治好好吃!!!

下国际象棋,一赢一平。

手机也没什么电了。。。

终于到站了,结果想起来还要做大巴额额额。

大巴闷死,晕晕晕,差点吐了。

大巴停酒店门口,结果老师走错了。。。

又走错了。。。

终于找到了,绕了半天。

进房间,写游记,听到有“滴滴”声,还以为有什么奇怪的东西,后面发现原来是自己鼠标在响。。。

洛谷打卡真神。

下午复习了一下。

晚上出去吃饭,结果跟老师一桌。。。

慌慌慌慌慌。

慌慌慌慌慌。

慌慌慌慌慌。

慌慌慌慌慌。

慌慌慌慌慌。

有惊有险的吃完了,回去还迷路了一下。

玩小猿口算,好玩!!!

结果听说今天学校运动会我们班发奶茶。。。

******

小!猿!口!算!输!了!一!把!

ccccccccccc。

得知明天6:40就得起床啊啊啊。

回房间打模板。

晚上睡不着。。。

Day 1

按照昨天老师讲的安排,6:40起床,去吃早饭,是酒店自助餐,好吃好吃好吃好吃好吃。

配张图,后面还吃了点别的,吃的挺撑。

7:30发准考证,FJ-0544。

走路去考场,不到十分钟就到了。

DT初中队合照。

(此处应有配图)

某考场校内老师超大声喊:“*****,安静!!!安静!!!高三在考试!!!”

乐。

交电子设备,拿吃的,进考场。

一进考场就感觉不对,看了下电脑,原来是高贵的32位win7,CCF太有实力了。

显示器特别矮,还没法调角度,只能弯着腰看。。。

不是考前不能碰电脑吗???

9:10发大样例解压密码。

签名,发现旁边坐的是yrc巨佬。

9:25左右yrc巨佬冲进考场,签完名后又冲出去上厕所。

9:30发题面解压密码。

这次倒是没有写黑板上,而是直接发txt文件,省时间了。

开题。

T1不会,慌慌慌。

T2不会,慌慌慌。

先写暴力,写了T1的 \(n\leq10\) 和 A,B性质。

C性质不会写,慌慌慌。

看T2,感觉是组合数学推公式,肯定不会啊啊啊。

一看时间,都11点多了,吃巧克力。

回T1,想C性质,突然发现用每个0分段再贪心的凑好像是 \(O(n)\) 的。

写写写,抽象的5.4KB,过了大样例。

开T3。

一看时间12点整,手撕面包启启启启启启动。

好吃好吃。

吃了一半吃不下了,可能是因为早上吃的比较多吧。

T3不会,回T2打25分。

暴力写挂了。。。

发现好像判断的不大对,赶紧改改改。

过了那部分的大样例。

剩10分钟,看T3,发现特殊性质A不大对劲,看大样例验证推测发现全是1,输出1骗4分。

剩五分钟,开扫雷,结果发现被删了。。。

玩小恐龙,结果玩到700多分考试就结束了。

估分100+25+4+0=129。

寄了。

真成福州两日游了。

看收取结果,没问题就回酒店了。

吃薯条。

吃汉堡。

吃麦乐鸡块。

吃一半发现忘拿酱了。。。

upd:因为今天吃薯条只拿了一包番茄酱,所以麦乐鸡块的酱被我拿来蘸薯条了。——2024.12.13

喝橙汁。

好冰。

喝撑死。

然后坐大巴,玩小猿口算,结果玩晕了。

晕晕晕。

想吐想吐想吐。

闷闷闷。

啊啊啊。

疯狂喝水,感谢@guozhetao提供宝贵的缓解晕车的建议。

终于下车了,但还是晕晕晕。

缓了半天终于缓过来了。

上火车,不晕了。

玩了一路小猿口算,成菜狗了,胜率掉到了85%左右。

终于到家了哈哈哈。

上洛谷,发现T1好像真了,但是感觉要寄。

Day 8

看到代码公示压缩包密码发出来了,赶紧解压。

怎么没法输密码???

哦哦原来是系统自带的没有密码功能啊。

随便下了个360压缩,在安装的时候仔细检查了三遍有没有附带软件。

交代码,一分没挂!!!

最终 \(100+25+4+0=129\)

好吧也没什么可高兴的,不过场切的T1是蓝有点蒙。

二等了吧。

其实平时也没怎么投入时间去学OI,这个成绩其实也是超乎意料了。

很可惜比我强的cyq等人因CSP发挥失常导致没有进入NOIP,我因为在CSP超常发挥拿到了名额,却白白浪费了。

Day 19

出分数线力。

福建二等奖分数线100。

二等奖。

代码:

不用管为什么会有人写出这么抽象的代码。

edit

#include <bits/stdc++.h>

using namespace std;

int T, n;
string a, b, c, d;
int ans = 0;
int ha[20], hb[20];
struct node {
	int ls, ys, l, r;
}za[100005], zb[100005];
int ta = 0, tb = 0;
bool okk[100005];

int check() {
	int cnta = 0, cntb = 0;
	for (int i = 1; i <= (n + 1); i++) {
		if ((c[i] == '0') || (i == (n + 1))) {
			if (cnta != cntb) return -1;
			if ((ha[i] != (a[i] - '0')) && (i != (n + 1))) return -1;
			cnta = 0;
			cntb = 0;
		}
		else {
			if (a[i] == '1') cnta++;
			if (ha[i] == 1) cntb++;
		}
	}
	cnta = 0, cntb = 0;
	for (int i = 1; i <= (n + 1); i++) {
		if ((d[i] == '0') || (i == (n + 1))) {
			if (cnta != cntb) return -1;
			if ((hb[i] != (b[i] - '0')) && (i != (n + 1))) return -1;
			cnta = 0;
			cntb = 0;
		}
		else {
			if (b[i] == '1') cnta++;
			if (hb[i] == 1) cntb++;
		}
	}
	int res = 0;
	for (int i = 1; i <= n; i++) {
		if (ha[i] == hb[i]) res++;
	}
	return res;
}

void dfs(int x) {
	if (x == (2 * n + 1)) {
		int res = check();
		if (res != -1) ans = max(ans, res);
		return ;
	}
	if (x <= n) ha[x] = 0;
	else hb[x - n] = 0;
	dfs(x + 1);
	
	if (x <= n) ha[x] = 1;
	else hb[x - n] = 1;
	dfs(x + 1);
	return ;
}

int ABS(int a) {
	if (a >= 0) return a;
	return (-1 * a);
}

int main() {
 	freopen("edit.in", "r", stdin);
 	freopen("edit.out", "w", stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	while (T--) {
		cin >> n;
		cin >> a >> b >> c >> d;
		a = " " + a;
		b = " " + b;
		c = " " + c;
		d = " " + d;
		ans = 0;
		if (n <= 10) {
			for (int i = 0; i < 20; i++) {
				ha[i] = 0;
				hb[i] = 0;
			}
			dfs(1);
			cout << ans << endl;
			continue;
		}
		bool qwq = 1;
		for (int i = 2; i <= n; i++) {
			if (a[i] != a[i - 1]) {
				qwq = 0;
				break;
			}
		}
		if (qwq) {
			ans = 0;
			for (int i = 1; i <= n; i++) if (b[i] == a[1]) ans++;
			cout << ans << endl;
			continue;
		}
		
		bool awa = 1;
		for (int i = 1; i <= n; i++) {
			if (c[i] != d[i]) {
				awa = 0;
				break;
			}
		}
		if (awa) {
			int cnta = 0, cntb = 0, lt = 0;
			for (int i = 1; i <= (n + 1); i++) {
				if (c[i] == '1' && (i != (n + 1))) {
					if (a[i] == '1') cnta++;
					if (b[i] == '1') cntb++;
				}
				else {
					ans += (i - 1 - lt - ABS(cnta - cntb));
					if ((a[i] == b[i]) && (i != (n + 1))) ans++;
					cnta = 0;
					cntb = 0;
					lt = i;
				}
			}
			cout << ans << endl;
			continue;
		}
		
//		int QwQ = 0, OvO = 0;
//		for (int i = 1; i <= n; i++) {
//			if (c[i] == '0') QwQ++;
//			if (d[i] == '0') OvO++;
//			if (QwQ > 1 || OvO > 1) break;
//		}
//		if (QwQ <= 1 && OvO <= 1) {
//			
//		}
		
		for (int i = 1; i <= ta; i++) {
			za[i].ls = 0;
			za[i].ys = 0;
			za[i].l = 0;
			za[i].r = 0;
		}
		for (int i = 1; i <= tb; i++) {
			zb[i].ls = 0;
			zb[i].ys = 0;
			zb[i].l = 0;
			zb[i].r = 0;
		}
		ta = 0; tb = 0;
		//////////
		for (int i = 1; i <= n; i++) {
			if (c[i] == '0') {
				za[++ta].ls = (a[i] == '0');
				za[ta].ys = (a[i] == '1');
				za[ta].l = i;
			}
			if (c[i] == '1') {
				if ((ta == 0) || (c[i - 1] == '0')) za[++ta].l = i;
				za[ta].ls += (a[i] == '0');
				za[ta].ys += (a[i] == '1');
			}
		}
		for (int i = 1; i <= ta; i++) za[i].r = za[i].l + (za[i].ls + za[i].ys) - 1;
		//////////
		for (int i = 1; i <= n; i++) {
			if (d[i] == '0') {
				zb[++tb].ls = (b[i] == '0');
				zb[tb].ys = (b[i] == '1');
				zb[tb].l = i;
			}
			if (d[i] == '1') {
				if ((tb == 0) || (d[i - 1] == '0')) zb[++tb].l = i;
				zb[tb].ls += (b[i] == '0');
				zb[tb].ys += (b[i] == '1');
			}
		}
		for (int i = 1; i <= tb; i++) zb[i].r = zb[i].l + (zb[i].ls + zb[i].ys) - 1;
//		debug();
		/////////
		for (int i = 1; i <= n; i++) okk[i] = 0;
		int ans = 0, zza = 1, zzb = 1;
		for (int i = 1; i <= n; i++) {
			while (za[zza].r < i) zza++;
			while (zb[zzb].r < i) zzb++;
			if (c[i] == '0') {
				if (d[i] == '0') {
					if (za[zza].ls == zb[zzb].ls) {
						za[zza].ls = 0;
						zb[zzb].ls = 0;
						za[zza].ys = 0;
						zb[zzb].ys = 0;
						ans++;
					}
					else {
						za[zza].ls = 0;
						zb[zzb].ls = 0;
						za[zza].ys = 0;
						zb[zzb].ys = 0;
					}
				}
				else {
					if (za[zza].ls == 1 && zb[zzb].ls >= 1) {
						zb[zzb].ls--;
						ans++;
					}
					if (za[zza].ys == 1 && zb[zzb].ys >= 1) {
						zb[zzb].ys--;
						ans++;
					}
					za[zza].ls = 0;
					za[zza].ys = 0;
				}
				okk[i] = 1;
			}
			//////
			if (d[i] == '0' && c[i] != '0') {
				if (zb[zzb].ls == 1 && za[zza].ls >= 1) {
					za[zza].ls--;
					ans++;
				}
				if (zb[zzb].ys == 1 && za[zza].ys >= 1) {
					za[zza].ys--;
					ans++;
				}
				zb[zzb].ls = 0;
				zb[zzb].ys = 0;
				okk[i] = 1;
			}
		}
		zza = 1; zzb = 1;
		for (int i = 1; i <= n; i++) {
			if (okk[i]) continue;
			while (za[zza].r < i) zza++;
			while (zb[zzb].r < i) zzb++;
			if (za[zza].ls >= 1 && zb[zzb].ls >= 1) {
				za[zza].ls--;
				zb[zzb].ls--;
				ans++;
			}
			else if (za[zza].ys >= 1 && zb[zzb].ys >= 1) {
				za[zza].ys--;
				zb[zzb].ys--;
				ans++;
			}
			else if (za[zza].ls >= 1 && zb[zzb].ys >= 1) {
				za[zza].ls--;
				zb[zzb].ys--;
			}
			else {
				za[zza].ys--;
				zb[zzb].ls--;
			}
		}
		cout << ans << endl;
	}
	return 0;
}

assign

#include <bits/stdc++.h>

using namespace std;

int T;
int n, m, v;
int s[20];
int ans = 0;
int a[20], b[20];
int xx[20];

void dfs(int x) {
	if (x == (2 * n - 1)) {
		bool crz = 1;
		for (int i = 1; i <= n; i++) xx[i] = s[i];
		for (int i = 1; i < n; i++) {
			if (xx[i] == a[i] && xx[i + 1] != b[i] && xx[i + 1] != -1) {
				crz = 0;
				break;
			}
			if (xx[i] == a[i] && xx[i + 1] == -1) xx[i + 1] = b[i];
		}
		
		ans += crz;
		return ;
	}
	int wwqwq = (x - 1) / 2 + 1;
	if (x % 2 == 1) {
		for (int i = 1; i <= v; i++) {
			a[wwqwq] = i;
			dfs(x + 1);
		}
	}
	else {
		for (int i = 1; i <= v; i++) {
			b[wwqwq] = i;
			if (!(s[wwqwq] == a[wwqwq] && s[wwqwq + 1] != b[wwqwq] && s[wwqwq + 1] != -1)) dfs(x + 1);
		}
	}
	return ;
}

int main() {
 	freopen("assign.in", "r", stdin);
 	freopen("assign.out", "w", stdout);
	cin >> T;
	while (T--) {
		ans = 0;
		for (int i = 0; i < 20; i++) {
			s[i] = -1;
			a[i] = 0;
			b[i] = 0;
		}
		cin >> n >> m >> v;
		if (n > 20 || m > 20 || v > 20) {
			cout << 0 << endl;
			continue;
		}
		bool cyq = 0;
		for (int i = 1; i <= m; i++) {
			int a, b;
			cin >> a >> b;
			if (s[a] != -1 && s[a] != b) cyq = 1;
			s[a] = b;
		}
		if (cyq) cout << 0 << endl;
		else {
			dfs(1);
			cout << ans << endl;
		}
	}
	return 0;
}

traverse

#include <bits/stdc++.h>

using namespace std;

int n, k;

int main() {
 	freopen("traverse.in", "r", stdin);
 	freopen("traverse.out", "w", stdout);
	int c, T;
	cin >> c >> T;
	while (T--) {
		cout << 1 << endl;
	}
	return 0;
}
posted @ 2025-02-10 17:31  wwqwq  阅读(69)  评论(2)    收藏  举报