首页 > 其他分享 >MX 炼石计划 NOIP 模拟赛20(我真做过1~19吗?)

MX 炼石计划 NOIP 模拟赛20(我真做过1~19吗?)

时间:2024-11-14 17:21:26浏览次数:1  
标签:10 20 炼石 NOIP int mid dep getchar dis

MX 炼石计划 NOIP 模拟赛 #20

T1 邻间的骰子之舞

二分答案,发现性质,签到,过。

记得开 __int128

没开,挂 30.

码:

CODE
#include <bits/stdc++.h>
typedef long long ll; 
using namespace std; 
const int N = 2e5 + 100; 

#ifdef linux
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#endif
inline int read() {
	int x = 0; char c = getchar(); 
	while (c < '0' || c > '9') c = getchar(); 
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); 
	return x; 
}
template <typename T> void write(T x) {
	if (x / 10) write(x / 10); 
	putchar(x % 10 + '0'); 
}

ll n, x, y; 
ll maxer; 

inline bool check(__int128 mid) {
	for (__int128 i = 0; i <= maxer; ++ i) {
		if (i * x >= mid) break; 
		if (i == 0) {
			if ((mid - i * x) / y + 1 > n) return true; 
			continue; 
		}

		__int128 j = (mid - i * x) / y, val = 1, aver = j / (i + 1), last = j - aver * (i + 1); 
		for (ll k = 0; k <= i; ++ k) {
			if (last > 0) {
				val += (aver + 1) * val, last --; 
			} else val += aver * val; 
			if (val > n) return true; 
		}
	}

	return false; 
}

signed main() {
	freopen("dice.in", "r", stdin); 
	freopen("dice.out", "w", stdout); 
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); 
	cin >> n >> x >> y; 

	__int128 l = 1, r = 1e19, ans = 0; maxer = log2(n); 

	while (l <= r) {
		__int128 mid = ((__int128)(l + r) >> 1ll); 

		if (check(mid)) {
			ans = mid, r = mid - 1; 
		} else l = mid + 1; 
	}

	write(ans + x); 
}

T2 星海浮沉录

签到2,拿 \(set\) 维护一下每种数位置以及两者之间距离,然后线段树上二分。

码:

CODE
#include <bits/stdc++.h>
typedef long long ll; 
using namespace std; 
const int N = 5e5 + 100; 

#ifdef linux
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#endif
inline int read() {
	int x = 0; char c = getchar(); 
	while (c < '0' || c > '9') c = getchar(); 
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); 
	return x; 
}
template <typename T> void write(T x) {
	if (x / 10) write(x / 10); 
	putchar(x % 10 + '0'); 
}

int n, q; int a[N]; 
int last[N]; 
multiset <int> num[N], dis[N]; 

#define lson (id << 1)
#define rson (id << 1 | 1)
#define mid ((l + r) >> 1)

int t[N << 2]; 
void updata(int id, int l, int r, int x, int c) {
	if (l == r) return t[id] = c, void(); 
	return ((x <= mid) ? updata(lson, l, mid, x, c) : updata(rson, mid + 1, r, x, c)), t[id] = max(t[lson], t[rson]), void(); 
}
int Query(int id, int l, int r, int k) {
	if (l == r) return l; 
	if (t[lson] >= k) return Query(lson, l, mid, k); 
	else return Query(rson, mid + 1, r, k); 
}

#undef mid

#define iter set <int>::iterator

inline void change(int x, int i, int j) {
	iter it = num[x].lower_bound(i), it2 = ++ it; -- it; 

	if (it != num[x].begin()) {
		int fir = *(-- it); ++ it; 
		dis[x].erase(dis[x].lower_bound(i - fir - 1)), dis[x].insert(j - fir - 1); 
	}
	if (it2 != num[x].end()) {
		int sec = *it2; 
		dis[x].erase(dis[x].lower_bound(sec - i - 1)), dis[x].insert(sec - j - 1); 
	}

	num[x].erase(i), num[x].insert(j); 
	updata(1, 0, n + 1, x, *dis[x].rbegin()); 
}

signed main() {
	freopen("star.in", "r", stdin); 
	freopen("star.out", "w", stdout); 
	n = read(), q = read(); 
	for (int i = 0; i <= n; ++ i) num[i].insert(0); 
	for (int i = 1; i <= n; ++ i) {
		a[i] = read(), num[a[i]].insert(i); 
		dis[a[i]].insert(i - last[a[i]] - 1); 
		last[a[i]] = i; 
	}
	for (int i = 0; i <= n; ++ i) {
		dis[i].insert(n - *num[i].rbegin()); num[i].insert(n + 1); 
		updata(1, 0, n + 1, i, *dis[i].rbegin()); 
	}

	int opt, x, tot = 0; 
	while (q --) {
		opt = read(), x = read(); 

		if (opt == 1) {
			if (a[x] == a[x + 1]) continue; 
			change(a[x], x, x + 1); 
			change(a[x + 1], x + 1, x); 
			swap(a[x], a[x + 1]); 
		} else {
			write(Query(1, 0, n + 1, x)), puts(""); 
		}
	}
}

注:byd梦熊还有什么逆天文件问题,甚至还只有一个测试点有文件问题?唐。

T3 勾指起誓

不会,咕了。

T4 _八交响曲

赛时没想出来。

考虑两个有序数组合并,只需要将镜像位置交换之后,发现其左右儿子区间保证左大于右或右大于左这么一个情况,遍历他儿子的时候就可以按位置交换了,非常优秀。

CODE
#include <bits/stdc++.h>
typedef long long ll; 
using namespace std; 
const int N = 200; 

int n; int m; 
vector <pair <int, int> > v[N]; 
int pos[N][N], pos2[N]; 

void Solve2(int l, int r, int dep, int ac) {
	if (l == r) return; 
	if (!pos[ac][dep]) pos[ac][dep] = ++ m; 
	int mid = (l + r) >> 1; 
	for (int i = l; i <= mid; ++ i) {
		int now = mid + i - l + 1; 
		if (now <= r && now != i) v[pos[ac][dep]].push_back(make_pair(i, now)); 
	}

	Solve2(l, mid, dep + 1, ac), Solve2(mid + 1, r, dep + 1, ac); 
}

void Solve(int l, int r, int dep) {
	if (l == r) return; 
	int mid = (l + r) >> 1; 
	Solve(l, mid, dep + 1), Solve(mid + 1, r, dep + 1); 
	if (!pos2[dep]) pos2[dep] = ++ m; 
	for (int i = 1; i <= mid; ++ i) 
		if (l + i - 1 < r - i + 1)
			v[pos2[dep]].push_back(make_pair(l + i - 1, r - i + 1)); 
	Solve2(l, mid, dep + 1, dep), Solve2(mid + 1, r, dep + 1, dep); 
}

signed main() {
	freopen("symphony.in", "r", stdin); 
	freopen("symphony.out", "w", stdout); 
	cin >> n; int p = n; 
	n = pow(2, ceil(log2(n))); 
	Solve(1, n, 1); 
	cout << m << '\n'; 

	for (int i = 1; i <= m; ++ i) {
		for (auto j : v[i]) {
			if (j.first <= p && j.second <= p)
			printf("CMPSWP R%d R%d ", j.first, j.second); 
		} puts(""); 
	}
}

总结

70(-30) + 100(-0) + 12(-0) + 10(-0)

中学生誓词

泌阳的我再不看数据规模瞎几把用龙龙并认为龙龙可以拯救一切我就踏马的玩原神吃鸡屎及防盗管被合一哟纸发现再回去玩宝宝巴士和迷奥迷奥看三国志!!!

标签:10,20,炼石,NOIP,int,mid,dep,getchar,dis
From: https://www.cnblogs.com/hangry/p/18546440

相关文章

  • 2024.11.14 NOIP训练赛
    2024.11.14NOIP训练赛Problem对满足以下条件的01矩阵\(A\)计数:行数为\(n+1\)(从\(0\)至\(n\)标号),列数为\(k\)(从\(1\)至\(k\)标号);不存在使得\(A_{0,i}\simA_{n-1,i}\)这\(n\)个数都为\(1\)的列\(i\);存在使得\(A_{1,i}\simA_{n,i}\)这\(n\)......
  • 2024年八大云手机品牌推荐
    面对市面上众多的云手机品牌,如何挑选出性价比高、性能稳定的产品呢?本文将为大家推荐2024年八大值得信赖的云手机品牌。OgPhone云手机OgPhone云手机作为行业领先品牌之一,凭借其强大的海外网络连接能力、多账号群控功能和稳定的服务,成为了不少企业和个人用户进行出海业务的好......
  • 中国工业统计年鉴(1949-2023年)(前身是中国工业经济统计年鉴)“
    01、数据简介一、《中国工业统计年鉴》是一部全面反映中国工业经济发展情况的资料性年刊,系统地收录了全国各经济类型、各工业行业和各省、自治区、直辖市等工业经济统计数据,以及主要指标历史数据。二、全书包括四大部分内容:综合数据、分行业数据、分地区数据和附录。主要......
  • COCI19-20#6 Trener题解
    COCI19-20#6Trenerlink一道水题(我真是太弱了啊啊啊啊。众所周知,看到这个题立刻知道他是要选名字长度为$1$到$N$的,而我们知道他每一个名字,所以可以直接用字符哈希去做,因为他每一个名字的字符数是上一层名字的字符数加一,所以对于哈希每个字符串只需要跑三次,分别是自己的这......
  • 2024年CRM系统性能评测:主流品牌大对决
    一、销售易CRM1.功能:销售易是一款集营销、销售、伙伴管理和售后服务于一体的综合性系统。其主要功能包括营销服全流程管理、分析决策和客户洞察。系统支持智能拓客、线索管理、产品报价、交易管理以及多维度组织支撑等,帮助企业从线索到回款实现全流程自动化和智能化闭环管理,显著......
  • 2024鹏城杯-misc
    网安第一课改zip解压找到key1key26iMmn76ucYG9PDtsvu解压之后上脚本fromPILimportImageimages=[Image.open(f"{i}.png")foriinrange(1,38)]qr_code=Image.new("RGB",(128,128),(255,255,255))foriinrange(37):img1=images[i]......
  • 2024鹏城杯-re
    Rafflesia先去花指令a='H@^jHwpsH)[jH{M/\\tBBK_|-O{W.iJZ7\\)|~zaB^H+Lwv{SS|-j@\\_[Y'flag=''foriinrange(len(a)):flag+=chr(ord(a[i])^0x18)print(flag)PXFrPohkP1CrPcU7DlZZSGd5WcO6qRB/D1dfbyZFP3ToncKKd5rXDGCA接着是tls改了表H......
  • Python练习2:企业发放的奖金根据利润提成。利润([)低于或等于10万元时,奖金可提10%;利润
     Python练习2:企业发放的奖金根据利润提成。利润([)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时......
  • 2024年美亚杯个人资格赛WP
    官方答案未出,仅代表个人观点 容器密码:eS2%u@q#hake2#Z@6LWpQ8^T(R7cg95m\Bv+y;$=/dqxYnEusFf)tb>:HKHwy+e%cR\r=9j:GsK)AV52/3hXfdv8#u7a6JQ^pz><YPNkq*!&案情简介 2024年8月某日,香港警方接获一名本地女子Emma报案,指她的姐姐Clara失联多天,希望报告一宗失踪人口的案件。......
  • 2024年末最新最全国内外15种项目管理工具推荐,超级建议产品经理收藏!
    以下是15款项目管理工具各参数特点详细表格,可以让大家更清晰一目了然的看到:工具名称功能特点适用场景优点禅道开源项目管理工具,支持需求、任务、bug跟踪、版本管理等功能。软件开发团队、敏捷开发团队免费开源,功能全面,适合国内团队,界面友好。Jira强大的敏捷项......