首页 > 其他分享 >2023 潮阳实验学校 OI 集训 D2

2023 潮阳实验学校 OI 集训 D2

时间:2023-08-22 17:33:43浏览次数:43  
标签:ch OI int ll ans 2023 using include D2

0822 复赛模拟

今天题挺符合胃口,打得挺舒服

T1

洛谷 P8295

一眼爆搜 其实是道数学题,可以观察余数来写下代码,运用到的无非就是用 \(4 \times 5\) 转 \(5 \times 4\) 之类的,处理时注意代码细节

#include <bits/stdc++.h>

using namespace std;

int n, ans;
int x, y, m;

int main() {
	scanf("%d", &n);
	x = n / 4;
	y = n % 4;
	m = x - y;
	if (m < 0) {
		ans = 0;
	} else {
		ans = m / 5 + 1;
	}
	printf("%d\n", ans);
	return 0;
}

T2

洛谷 P9321

一眼堆

这道题如果每次询问就 sort 一遍的话只能拿 33 分,但是如果和我一样使用 priority_queue 的话,那么最终能拿到 77 分,T 掉两个大点

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

ll n, s, m, c;

priority_queue<ll> h, q;

inline ll read() {
    register ll x = 0, f = 1;
    register char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

inline void write(ll x) {
    if (x < 0) putchar('-'), x = -x;
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}

int main() {
	n = read(), s = read();
	for (register ll i = 1, in; i <= n; i++) {
		in = read();
		h.push(in);
	}

	while (s--) {
		m = read(), c = read();
	
		for (register ll i = 1; i <= c; i++) {
			q.push(h.top() - m);
			h.pop();
		}
		
		for (register ll i = 1; i <= c; i++) {
			h.push(q.top());
			q.pop();
		}
	}

	for (register ll i = 1; i <= n; i++) {
		write(h.top());
		putchar(' ');
		h.pop();
	}
	puts("");

	return 0;
}

由于本人不会 STL 卡常,所以老老实实按照教练给的题解改打归并来减少常数

虽然没学过归并,但是 打打代码 后发现还是挺好懂的

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 50;

int n, s, m, c;
int a[N], t[N];

int main() {
	scanf("%d %d", &n, &s);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	
	sort(a + 1, a + n + 1, greater<int>());		// 在应对第一次询问之前先保证数列有序

	while (s--) {
		scanf("%d %d", &m, &c);
		for (int i = 1; i <= c; i++)	// 应对脚本
			a[i] -= m;

		int i = 1, j = c + 1, k = 0;
		while (i <= c && j <= n) {			// 移动双指针
			if (a[i] >= a[j]) t[++k] = a[i++];
			else t[++k] = a[j++];
		}
		while (i <= c) t[++k] = a[i++];
		while (j <= n) t[++k] = a[j++];
		
		for (int i = 1; i <= n; i++)		// 合并更改
			a[i] = t[i];
	}
	
	for (int i = 1; i <= n; i++)
		printf("%d ", a[i]);
	printf("\n");
}

T3

洛谷 P6359

考场上写了 100 多行的模拟,然后还没写过去……写到一半把自己绕晕了,然后寄掉

参考 题解 思路

不难写出代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int intN = 2e5 + 50;

ll n, m, cnt, ans;
ll f[intN];

struct node {
	ll c, f, v;
} s[intN];

bool cmp(node a, node b) {
	if (a.f == b.f) return a.v < b.v;
	return a.f > b.f;
}

int main() {
	scanf("%lld", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%lld %lld %lld", &s[i].c, &s[i].f, &s[i].v);
		s[i].v  = -s[i].v;
	}
	scanf("%lld", &m);
	for (int i = n + 1; i <= n + m; i++)
		scanf("%lld %lld %lld", &s[i].c, &s[i].f, &s[i].v);
	sort(s + 1, s + n + m + 1, cmp);
	
	memset(f, 128, sizeof(f));

	f[0] = 0;
	for (int i = 1; i <= n + m; i++) {
		if (s[i].v < 0) {
			for (int j = cnt; j >= 0; j--)
				f[j + s[i].c] = max(f[j + s[i].c], f[j] + s[i].v);
			cnt += s[i].c;
		} else {
			for (int j = 0; j <= cnt - s[i].c; j++)
				f[j] = max(f[j], f[j + s[i].c] + s[i].v);
		}
	}
	
	for (int j = 0; j <= cnt; j++)
		ans = max(ans, f[j]);
	printf("%lld\n", ans);
	return 0;
}

T4

洛谷 P6150

爆搜只能拿 30 分,所以需要 魔法

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 50;
const int MOD = 12;

int n, ans;
int c[N], t[N];

vector<int> f[N];

void dfs(int u, int x) {
	for (int i = 0; i < f[u].size(); i++) {
		int v = f[u][i];
		if (v == x) continue;
		dfs(v, u);
		t[u] = (t[u] - t[v] + 12) % MOD;
	}
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &c[i]);
		c[i] %= MOD;
	}
	
	for (int i = 0, u, v; i < n - 1; i++) {
		scanf("%d %d", &u, &v);
		f[u].push_back(v);
		f[v].push_back(u);
	}
	
	for (int i = 1; i <= n; i++) {
		memcpy(t, c, sizeof(t));
		dfs(i, 0);
		if (t[i] == 0 || t[i] == 1)
			ans++;
	}
	
	printf("%d\n", ans);
	return 0;
}

标签:ch,OI,int,ll,ans,2023,using,include,D2
From: https://www.cnblogs.com/xsyc/p/17649191.html

相关文章

  • 如何使用Android访问文件系统路径
    Android中获取文件路径的方法:使用Context)方法:Android中获取文件路径的方法:1.使用Context.getFilesDir()方法:该方法返回的是一个File对象,它指向应用的私有文件目录,比如/data/data//files,可以通过该方法获取到应用的文件路径。代码示例:StringfilePath=getApplicationConte......
  • 零基础学Android,通俗易懂的Android教程
    前言对于一个想要入门Android的新手同学来说最重要的就是找对入门的学习路线,那样可以少走很多弯路,今天,小编就来和大家唠唠Android入门的学习方法。首先,一定要有一定的JAVA基础。我们都知道AndroidSDK是基于JAVA开发的,也是用的JAVA语言,比如在Android中要使用到的接口、继承、覆盖......
  • Android之获取DNS,优先返回本地网络DNS(插网线),其次选择Wifi网络的DNS
    code参考:https://www.cnblogs.com/alex-zhao/p/5254624.html/***获取DNS,优先返回本地网络DNS(插网线),其次选择Wifi网络的DNS**/publicstaticStringgetLocalDNS(Contextcontext){StringTAG="WiFiUtil_getLocalDNS";ProcesscmdProce......
  • 2023-08-22 git remote -v 为空 ==》为空意味着没有你该仓库没有远程仓库地址
    我想给新建的项目A创建一个版本库,so,我gitinit,然后我用gitremote-v查看,回车然后就为空了,百度了一下,说是没有你该仓库没有远程仓库地址;我还以为会链接到我其他的仓库去,看来不会,so,我在github创建了一个远程仓库,然后用gitremote-v链接到该仓库;即gitremote-v远程仓库地址;回车......
  • 让Android Studo 不编译某个Java文件
    有时为了调试,让某些文件暂时不需编译,这样可以排除错误带来的无法运行情况,可以在build.gradle中加入:excludes=['com.coolweather.myble/AddrInterceptor.java'],如下compileOptions{sourceCompatibilityJavaVersion.VERSION_1_8targetCompatibilityJavaVers......
  • 2023.8.22
    有点超模了。签完到跑路。记下做法。T2有字符串\(S\),\(T\),且\(|S|=n\),\(|T|=m\),均由小写字母构成。一个匹配指\(T\)作为子序列在\(S\)中出现,记匹配位置为\(pos_1,pos_2,\dots,pos_m\),该匹配的权值为\(\displaystyle\sum_{i=1}^{m}A_{pos_i}\).每次问\(S[l:r]\)与\(......
  • 「JLOI2014」松鼠的新家 题解
    「JLOI2014」松鼠的新家前言这道题倒也不是很难,只是有一些小坑需要避一下,可以看作半个LCA树上差分裸题。解析考虑维护一个树,点\(u\)表示每个房间需要的糖果数\(s_u\),而维尼在参观房间时从\(a\)到\(b\)就需要在\((a,\tob)\)的路径上的每个房间都摆上一个糖果,这时直......
  • 「NOIP2008 普及组」ISBN 号码 题解
    前言转自博客,早期黑历史作品。这是本蒟蒻の第一篇题解qwq,发在博客上,还请多多关照.这道题是一道橙题,难度没有太大的问题,对于大犇们来说自然是一遍过的,本蒟就只能调调再交了.题面传送门题目描述每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字、1......
  • 「NOIP2010」机器翻译 题解
    前言附加任务这道题也是一个简单模拟题。传送门解析这道题就是一个简单的模拟题,简单来说就是如果内存里面没有这个单词(其实是一个数)的话就从外存入队,如果内存容量不够,出队即可。对了,每次查询时还要计数噢!代码话不多说上代码#include<bits/stdc++.h>usingnamespacestd......
  • 2023 年如何将您的应用提交到 App Store
    您夜以继日地工作来创建您的梦想应用程序。最后,是时候向全世界宣布您的应用程序了。但不知道如何将您的应用提交到AppStore?为您的商店获取现成的移动应用程序将应用程序提交到AppStore可能是一项复杂的任务。但在本指南的帮助下,事情会变得容易得多。这是一份详细指南,......