首页 > 其他分享 >2024.2.22 初三集训模拟测试4

2024.2.22 初三集训模拟测试4

时间:2024-02-23 10:45:43浏览次数:17  
标签:2024.2 22 int sum namespace cnt up num 集训

终于挽回了一点颜面。(模拟赛最水的一集)

排名

image

T1 打赌

不得语,暗相思,两心之外无人知。

image

一直记录这骰子的上面、正面和右面。先把暴力打出来,然后优化一下就行。同一行翻转的时候一直是四个状态循环,随便处理一下就行。

一顾倾城,再顾倾国。
#include <bits/stdc++.h>
#define int long long

using namespace std;

int n,m;

namespace Sub1{
	void work(){
		int up = 1,fr = 2,ri = 3,num = 1;
		for(int i = 1;i <= n;i ++){
			if(i % 2 == 1){
				for(int j = 2;j <= m;j ++){
					int nup = 7 - ri,nfr = fr,nri = up;
					up = nup,fr = nfr,ri = nri,num += up;
				}
				int nup = 7 - fr,nfr = up,nri = ri;
				up = nup,fr = nfr,ri = nri,num += up;
			}
			else{
				for(int j = m - 1;j >= 1;j --){
					int nup = ri,nfr = fr,nri = 7 - up;
					up = nup,fr = nfr,ri = nri,num += up;
				}
				int nup = 7 - fr,nfr = up,nri = ri;
				up = nup,fr = nfr,ri = nri,num += up;
			}
		}
		printf("%lld",num - up);
	}
}

namespace Sub2{
	void work(){
		int up = 1,fr = 2,ri = 3,num = 1;
		for(int i = 1;i <= n;i ++){
			if(i % 2 == 1){
				int ans = up + ri + 7 - up + 7 - ri;
				num += (m - 1) / 4 * ans;
				for(int j = 1;j <= (m - 1) % 4;j ++){
					int nup = 7 - ri,nfr = fr,nri = up;
					up = nup,fr = nfr,ri = nri,num += up;
				}
				int nup = 7 - fr,nfr = up,nri = ri;
				up = nup,fr = nfr,ri = nri,num += up;
			}
			else{
				int ans = up + ri + 7 - up + 7 - ri;
				num += (m - 1) / 4 * ans;
				for(int j = 1;j <= (m - 1) % 4;j ++){
					int nup = ri,nfr = fr,nri = 7 - up;
					up = nup,fr = nfr,ri = nri,num += up;
				}
				int nup = 7 - fr,nfr = up,nri = ri;
				up = nup,fr = nfr,ri = nri,num += up;
			}
		}
		printf("%lld",num - up);
	}
}

signed main(){
	freopen("pogodak.in","r",stdin);
	freopen("pogodak.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	if(n <= 100 and m <= 100) Sub1::work();
	else Sub2::work();
	return 0;
}

T2 舞会

心不会动摇,动摇的是情。

image

对于喜欢比自己高的男孩和比喜欢比自己矮的女孩提取出来,分别按身高从小到大排序。每个男孩都尽量找离自己近的比自己高的女孩。正确性显然。其余同理。

琴与棋之中,涌动着相似的力量。
#include <bits/stdc++.h>
#define N 100005

using namespace std;

int n,a_z[N],a_f[N],b_z[N],b_f[N],num;
int cnt_a_z,cnt_a_f,cnt_b_z,cnt_b_f;

int main(){
	freopen("party.in","r",stdin);
	freopen("party.out","w",stdout);
	scanf("%d",&n);
	for(int i = 1,x;i <= n;i ++){
		scanf("%d",&x);
		if(x > 0) a_z[++cnt_a_z] = x;
		else a_f[++cnt_a_f] = -x;
	}
	for(int i = 1,x;i <= n;i ++){
		scanf("%d",&x);
		if(x > 0) b_z[++cnt_b_z] = x;
		else b_f[++cnt_b_f] = -x;
	}
	sort(a_z + 1,a_z + cnt_a_z + 1);
	sort(a_f + 1,a_f + cnt_a_f + 1);
	sort(b_z + 1,b_z + cnt_b_z + 1);
	sort(b_f + 1,b_f + cnt_b_f + 1);
	int j = 1;for(int i = 1;i <= cnt_a_z;i ++){
		for(;j <= cnt_b_f;j ++){
			if(a_z[i] < b_f[j]){num ++;break;}
		}j ++;
	}
	j = 1;for(int i = 1;i <= cnt_b_z;i ++){
		for(;j <= cnt_a_f;j ++){
			if(b_z[i] < a_f[j]){num ++;break;}
		}j ++;
	}
	printf("%d",num);
	return 0;
}

T3 最小生成树

聆听渴望的,深信珍视的,沉醉梦寐以求的。

image

发现其实除 \(1\) 之外的所有数都向 \(1\) 连,这个时候所有的边权都是 \(1\),是一个最小生成树。所以对于每一个点我们只能找比它小的且与它互质的数的个数,然后把它们乘起来就行了。注意模数非常的不正常。做法是欧拉函数。

情从何起,方能一往而深。
#include <bits/stdc++.h>
#define int long long
#define MOD 100000007

using namespace std;

int n,num = 1;

signed main(){
	freopen("mst.in","r",stdin);
	freopen("mst.out","w",stdout);
	scanf("%lld",&n);
	for(int i = 2;i <= n;i ++){
		int ans = i,w = i;
		for(int j = 2;j * j <= w;j ++){
			if(w % j == 0){
				ans = ans / j * (j - 1);
				while(w % j == 0) w /= j;
			}
		}
		if(w > 1) ans = ans / w * (w - 1);
		num *= ans;num %= MOD;
	}
	printf("%lld",num);
	return 0;
}

T4 买汽水

春江花月照人生无穷,弦音流转听山河入梦。

image

正解是考虑将汽水平均分成 \(2\) 组。每组 \(2^{n/2}\) 暴搜,每组至多 \(10^6\) 种情况。按价格排序。拿 \(2\) 个指针在 \(2\) 组扫,求最优值(注意常数)。

我是直接贪心加 shuffle 乱搞。

其实数据很水,前四个数据是所有的 \(a_i\) 相加,后六个是 \(m\)。

放的是我的贪心加 shuffle 乱搞代码。

最放不下的,终究是回忆吧。
#include <bits/stdc++.h>
#define N 45

using namespace std;

mt19937 rd(time(0));
int n,m,a[N],num;

namespace Sub1{
	void dfs(int x,int sum){
		num = max(num,sum);
		if(x == n + 1) return ;
		dfs(x + 1,sum);
		if(sum + a[x] <= m) dfs(x + 1,sum + a[x]);
	}
	
	void work(){dfs(1,0);printf("%d",num);}
}

namespace Sub2{
	void work(){
		sort(a + 1,a + n + 1);
		for(int i = 1;i <= n;i ++){
			if(num + a[i] > m) break;
			num += a[i];
		}
		while(double(clock()) / CLOCKS_PER_SEC < 1.9){
			shuffle(a + 1,a + n + 1,rd);
			int sum = 0,k = 0;
			for(int i = 1;i <= n;i ++){
				if(sum + a[i] > m) break;
				k = i;sum += a[i];
			}
			num = max(num,sum);
			for(int i = 1;i <= k;i ++){
				for(int j = k + 1;j <= n;j ++){
					if(sum - a[i] + a[j] <= m) num = max(num,sum - a[i] + a[j]);
				}
			}
			if(num == m) break;
		}
		printf("%d",num);
	}
}

int main(){
	freopen("drink.in","r",stdin);
	freopen("drink.out","w",stdout);
	srand(time(0));
	scanf("%d%d",&n,&m);
	for(int i = 1;i <= n;i ++) scanf("%d",&a[i]);
	if(n <= 20) Sub1::work();
	else Sub2::work();
	return 0;
}

标签:2024.2,22,int,sum,namespace,cnt,up,num,集训
From: https://www.cnblogs.com/Joy-Dream-Glory/p/18028960

相关文章

  • 2.22前总结
    2.1[CQOI2011]动态逆序对[HEOI2016/TJOI2016]序列2.2[BZOJ3730]点分树|震波(模板)2.3[ZJOI2015]幻想乡战略游戏2.42.5[HNOI2015]开店[SDOI2011]消耗战2.6考试(270pts,rk1)2.7-2.17替罪羊树2.18-2.19考试+题解2.20[SDOI2015]寻宝游戏2.21-2.22考试+题解总结:做题......
  • 2024.2.22 梦想 在什么地方 总是那么令人向往
    字符串太难了。今天早上起来牙又疼了,很难受。UOJ461考虑当前已经把整张图分成了\(L,R\)两个点集,考虑extend一个点进来。可以使用二分的方式,具体的将未加入的点按任意顺序排列,二分一个前缀并断掉\(L,R\)与这个前缀的所有边,找到一个最小的前缀满足此时不连通,此时对于这个......
  • 2024.2.22模拟赛T3 题解
    对于区间连边,可以线段树优化建图对于单点连边,可以使用李超线段树维护迪杰斯特拉code#include<bits/stdc++.h>usingnamespacestd;#defineN400005#defineintlonglong#definepiipair<int,int>#definefirfirst#definesecsecondintn,m,tot;intval[N];const......
  • 2.22 闲话 & solution 『虽然我不是神/不像他们无所不能/却总畏惧一语成谶』
    有↑没有↓谁↑能够↓代↑替↓我↑(去考开学的一调)唐氏模拟赛,板子大战,全场都是板子,\(\textT3\)甚至还不如板子,\(byd\)题解居然是用的高贵的\(O(n\logn)\)算欧拉函数,唐\(\text{lxyt}\)复活赛打赢了可以去打\(\text{HEOI2024}\)了,体验名额DZ和xrlong的代码进行了大量对拍,仍......
  • 李宏毅2022机器学习HW3 Image Classification
    Homework3数据集下载在本地环境下进行实验总是令人安心,但是又苦于网上找不到数据集,虽然kaggle上有数据集但是下载存在问题于是有了一个天才的想法,间接从kaggle上下载(利用output文件夹中的文件是可下载这一机制将数据集从input文件夹拷贝到output文件夹),具体操作如下图等待数......
  • Visual Studio 2022 .Net 8 启用AOT publish enabled 发布失败
    .Net8NativeAOT的优势: 我使用VisualStudio2022创建了一个面向.NET8的控制台应用程序。我在创建项目时选中了启用本机AOT发布选项。它给出了以下错误: 错误文本:发布遇到错误。发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。诊断......
  • 2024.2.22 LGJ Round
    A你需要求\(n\timesm\)格子里随机撒\(k\)个点,期望扫多少次使得相邻的格子没有同时有点。\(n\timesm\le80,k\le20\)。直接状压求出方案数即可。B你需要维护一个数组,支持区间求和或执行覆盖操作fori:=ltordoa[i]:=a[i-k]或区间回溯成一开始的数。可持久化平衡......
  • 2.21+2.22考试总结
    连续两天数组开小,\(D1T1\30+D2T2\60+D2T4\10\),一旦数组开大就\(A\)了\(qwq\)。Day1T1排序题目大意:给出一个长度为\(4n\)的序列\(a\),要求将其配对为\(n\)个四元组\(x_i,y_i,z_i,w_i\),求\(\max\sum\limits_{i=1}^n|x_iy_i-z_iw_i|\)。难度:三星(满分十星)发现绝......
  • 2024初三集训模拟测试3
    2024初三集训模拟测试3T1排序:显然贪心。将1ll*a[i]*a[i-1]\(\to\)1ll*(a[i]*a[i-1])囍爆零CODE#include<bits/stdc++.h>usingnamespacestd;usingllt=longlong;usingull=unsignedlonglong;#defineFor(i,a,b,c)for(inti=(a);i<=(b);i+=(c))#defineFor......
  • 闲话222
    今天是222欸......