首页 > 其他分享 >【学校训练记录】10月个人训练赛3个人题解

【学校训练记录】10月个人训练赛3个人题解

时间:2024-10-17 18:22:26浏览次数:1  
标签:10 int 题解 cin long 训练赛 maxs solve define

A:

根据题意我们可知,第一种事件为从1到i的和,第二种事件为从y到i的和故我们可以通过前缀和来保存从i到i+1所化的时间。再遍历寻找最小值即可

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

int n, a[1010]; 
void solve(){
	cin >> n;
	for(int i = 1; i <= n-1; i++){
		string s; cin >> s;
		if(s == "Patrik"){
			int x; cin >> x;
			a[i] = x;
		}
		else {
			int x, y; cin >> x >> y;
			a[i] = a[x-1]+y;
		}
	}
	int mins = 1e18;
	for(int i = 1; i <= n-1; i++){
		mins = min(mins, a[i]-a[i-1]);
	}
	for(int i = 1;i <= n-1; i++){
		if(a[i]-a[i-1]==mins){
			cout << a[i]-a[i-1] << ' ' << i << ' ' << i+1 ;
			break;
		}
	}
}
signed main (){
	ios::sync_with_stdio(false);
	cin.tie(nullptr); 
	int T;
//	cin >> T;
	T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

B:

每人一张牌,每人手中的牌有一个权值,若牌与T相同则为找出其权值最大,没有T就找与第一个人相同且权值最大的即可

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

int n, m, a[200010], b[200010]; 
void solve(){
	cin >> n >> m;
	int maxs = 0, num = 0;
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i <= n; i++) cin >> b[i];
	for(int i = 1; i <= n; i++){
		if(a[i]==m && b[i]>maxs){
			maxs = b[i];
			num = i;
		}
	}
	if(!num){
		m = a[1], maxs = b[1], num = 1;
		for(int i = 1; i <= n; i++){
			if(a[i]==m && b[i]>maxs){
				maxs = b[i];
				num = i;
			}
		}
	}
	cout << num;
}
signed main (){
	ios::sync_with_stdio(false);
	cin.tie(nullptr); 
	int T;
//	cin >> T;
	T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

C:

此题根据求和不难想到为二维前缀和,而数据量较小,我们可以直接遍历矩形左上和右下的端点来遍历每一个矩阵即可

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

int n, m, k, a[110][110];
void solve(){
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			char ch; cin >> ch;
			int c = ch-'0';
			a[i][j]= c-a[i-1][j-1]+a[i-1][j]+a[i][j-1];
		}
	}
	int mins = 1e18;
	for(int x = 1; x <= n; x++){
		for(int y = 1; y <= m; y++){
			for(int i = x; i <= n; i++){
				for(int j = y; j <= m; j++){
					int now = a[i][j]-a[i][y-1]-a[x-1][j]+a[x-1][y-1];
					if(now>=k) mins = min(mins, (i-x+1)*(j-y+1));
				}
			}
		}
	}
	if(mins == 1e18) cout << '0';
	else cout << mins;
}
signed main (){
	ios::sync_with_stdio(false);
	cin.tie(nullptr); 
	int T;
//	cin >> T;
	T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

D:

数据量小我们可以直接遍历每一种范围内位置的左端点并计算实现不交税之后的值,求出其最小值

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

int n,a[1100]; 
void solve(){
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	sort(a+1, a+1+n);
	int sum = 1e18;
	for(int i = a[1]; i <= a[n]; i++){
		int now = 0;
		for(int j = 1; j <= n; j++){
			if(a[j]>i+17){
				now+=(a[j]-i-17)*(a[j]-i-17);
			}
			else if(a[j]<i){
				now+=(i-a[j])*(i-a[j]); 
			}
		}
		sum = min(now, sum);
	}
	cout << sum;
}
signed main (){
	ios::sync_with_stdio(false);
	cin.tie(nullptr); 
	int T;
//	cin >> T;
	T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

E:暂时不会
F:

区间dp通过计算i到i+l的区间内的最优解来依次实现每个区间的最优解,直到大小为整个区间,其中a[i][i+l]为从i开始长度为l的区间的最优解,其中遍历实现依次将区间内哪两个操作过的史莱姆合成值最小

#include <bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;

int n, a[410], b[410][410], c[410];
void solve(){
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i], c[i]=c[i-1]+a[i];
	for(int l = 1; l <= n-1; l++){
		for(int i = 1; i+l <= n; i++){
			b[i][i+l] = 1e18;
			for(int j = 1; j <= l;j++){
				b[i][i+l] = min(b[i][i+l-j]+b[i+l-j+1][i+l],b[i][i+l]);
			}
			b[i][i+l]+=c[i+l]-c[i-1];
//			cout << b[i][i+l] << ' ' << i << ' ' << i+l << endl;
		}
	}
	cout << b[1][n];
}
signed main (){
	ios::sync_with_stdio(false);
	cin.tie(nullptr); 
	int T;
//	cin >> T;
	T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

标签:10,int,题解,cin,long,训练赛,maxs,solve,define
From: https://www.cnblogs.com/qkauto/p/18472832

相关文章

  • 一、STM32F103C8T6--GPIO
    STM32f103c8t632位Cortex-M3内核RISC处理器,最高主频72MHZ,Flash:64KB,SRAM:20KB片上外设:I/O端口:多达37个GPIO引脚(支持复用功能)。GPIO端口支持输入、输出、上拉/下拉功能。定时器:3个16位通用定时器(支持PWM输出)。********1个高级定时器(支持多通道PWM)。通信接口:......
  • 题解:GZOI2024 D2T2 乒乓球
    考场上切了,但是比较神奇的题,应该是蓝/紫。Discription乒乓球\(\text{}\)时间限制:\(\bold{3}\)秒众所周知,一场乒乓球比赛共有两个玩家\(A\)和\(B\)参与,其中一场比赛由多局比赛组成,而每局比赛中又由多盘比赛组成。每盘比赛\(A\)或\(B\)只有一名选手获胜。当其中一名......
  • 《柯娜:精神之桥》游戏未响应弹窗“缺少msvcp100.dll”文件的原因分析及处理教程
    当玩家们兴致勃勃地准备开启《柯娜:精神之桥》的游戏之旅时,却突然遭遇游戏未响应,弹窗提示“缺少msvcp100.dll”文件,这无疑给玩家们的热情浇上了一盆冷水。究竟是什么原因导致了这一情况的发生?又该如何去解决呢?下面将为大家详细分析原因并给出处理教程。未响应弹窗“缺少msvcp1......
  • 10.17 模拟赛
    炼石计划10月01日NOIP模拟赛#7【补题】-比赛-梦熊联盟(mna.wang)复盘T1一眼不会。先打了前\(30\)的爆搜。虽然这个爆搜假了但是最后也没管它。后面的暴力分挺多。先往后做。T2\(2^{2n}\)的暴力可以过\(20\)。\(n=16\)的特殊性质可以\(3^n\)枚举子集过。......
  • 2024/10/17 模拟赛总结
    \(100+50+0+35=185\),呃呃呃,终于吃上LRX了#A.语言考虑名词性词组的性质,由于它可以由任意名词,形容词和名词性词组拼接起来,那么连续的名词,形容词或交替出现都是可行的但是如果最后一个是形容词不可行,不然它就无法修饰其他词语了于是可以枚举那一个单独的动词,判断前面和后面知......
  • 【2024华为OD-E卷-100分-内存资源分配】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目描述有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源,用户会进行一系列内存申请,需要按需分配内存池中的资源返回申请结果成功失败列表。分配规则如下:分配的内存要大于等于内存的申请量,存在满足需求的内存就必须分配,优先分配粒度小的......
  • 2024/10/17日 日志 --》关于MySQL中的 约束、多表查询的初步学习笔记与整理
    今天推进了关于约束以及多表查询的内容,下一步是事务以及关于连接数据库JDBC的学习。点击查看代码----约束--1.概念:--·约束是作用于列上的规则用于限制加入表的数据--·约束的存在保证了数据库中数据的正确性、有效性和完整性--2.约束的分类--非空约束NOTNULL:......
  • [题解]P1311 [NOIP2011 提高组] 选择客栈
    P1311[NOIP2011提高组]选择客栈P6032选择客栈加强版只要\([l,r]\)区间之内存在一个\(i\)使得\(w[i]\lep\),这个区间就是符合条件的。所以我们遍历每一个元素\(i\),根据贪心的思想我们维护\([1,i]\)区间内满足\(w[i]\lep\)的最大\(i\),记为\(mp\)。对于每个元素\(i\),寻找\(......
  • 2024.10.08星期二
    今天配置了vue环境,学习了基础的vue语法,在这个过程中遇到了如下问题1.安装完node.js和vuecli后,创建项目的时候出现了问题我无法通过yarnserve启动项目,但由于默认下载设置的是yarn,导致也无法使用npmrunserve启动在这里卡了很久,解决办法是在C盘的user目录下有一个文件,其实后面......
  • 2024.010.10
    今天主要是记录一些问题,主要是在使用vue通过axios发送请求的时候,起初我认为需要把vue和springboot整合到一块但是在听完课之后发现并不需要,因为vue的目的是实现前后端分离的开发,因此两个项目可以同时运行,调整vue项目就是改前端代码,调整springboot就是改后端代码,前端只负责发送请......