首页 > 其他分享 >2024睿抗国赛赛后总结

2024睿抗国赛赛后总结

时间:2024-08-04 22:07:11浏览次数:9  
标签:抗国赛 dist val int else 2024 st 1010 赛后

题目可以去pta教育超市找

写第一题还很清醒。(耗时15分钟)

#include<bits/stdc++.h>
using namespace std;
string s;
int sum = 0,len = 0;
int cnt = 0;

int check(char c){
	if(c >= 'a' && c <= 'z'){
		return 1;
	}else if(c <= 'Z' && c >= 'A'){
		return 2;
	}else if(c <= '9' && c >= '0'){
		return 3;
	}else{
		return 0;
	}
}

void f(string t){
	len += t.size();
	if(t.size()){
		cnt ++;
	}
	bool f1 = false, f2 = false, f3 = false;
	for(int i = 0;i < t.size();i ++){
		if(check(t[i]) == 1){
			f1 = true;
		}else if(check(t[i]) == 2){
			f2 = true;
		}else{
			f3 = true;
		}
	}
	if(f1 && f2 && f3){
		sum += 5;
	}else if((f1 && f3) || (f2 && f3)){
		sum += 3;
	}else if(f1 && f2){
		sum += 1;
	}
}

void solve(){
	
	while(cin >> s){
		string t = "";
		for(int i  = 0;i < s.size();i ++){
			if(check(s[i])){
				t += s[i]; 
			}else{
				f(t);
				t = "";
			}
		}
		if(t.size()){
			f(t);
		}
	}
	cout << sum << endl << len << ' ' << cnt << endl;
}

int main(){
	int t = 1;
	while(t --){
		solve();
	}
} 

第二题就开始犯迷糊了,题面太恶心了,val数组少写了一个半天没找到,无语了。。。(耗时25分钟)

#include<bits/stdc++.h>
using namespace std;
int val[] = {0, 25, 21, 18, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

struct d{
	int first;
	int second;
}a[40];

bool cmp(d x, d y){
	if(x.first != y.first){
		return x.first > y.first;
	}else{
		return x.second < y.second;
	}
}

void solve(){
	int n;
	cin >> n;
	map<int,int>mp;
	while(n --){
		for(int i = 0;i < 20;i ++){
			int x, y;
			cin >> x >> y;
			mp[x] = 1;
			a[x] = {a[x].first + val[y], x};
		}
	}
	sort(a + 1, a + 31, cmp);
	for(int i = 1;i <= 30;i ++){
		if(mp[a[i].second])
			cout << a[i].second << ' ' << a[i].first << endl;
	}
}

int main(){
	int t = 1;
	while(t --){
		solve();
	}
} 

第三题,一开始忘了如何dfs求排列,求完排列果断暴力,最后就14分,当时想的是dp,没想到就是一个简单数学问题。每个数可以拆个十百千来算,就是个排序

#include<bits/stdc++.h>
using namespace std;

int a[5], st[5];
map<int,int>mp;
int n;
vector<int>b;
set<int>s;
vector<int>ans;

void dfs1(int val, int cnt){
	if(cnt >= n){
		s.insert(val);
		return;
	}
	for(int i = 1;i <= n;i ++){
		if(!st[i]){
			st[i] = 1;
			dfs1(val * 10 + a[i], cnt + 1);
			st[i] = 0;
		}
	}
}

void solve(){
	cin >> n;
	for(int i = 1;i <= n;i ++){
		cin >> a[i];
	} 
	dfs1(0, 0);
	long long sum = 0;
	for(auto x : s){
		b.push_back(x);
		sum += x * x;
	}
	int f = 1;
	for(int i = 0;i < b.size();i += 2){
		int c = b[i], d = b[i + 1];
		if(f == 1)
			cout << c << endl;
		else
			cout << d << endl;
		f *= -1;
	}
}

int main(){
	int t = 1;
	while(t --){
		solve();
	}
} 

第四题,当时写最短路,然后写的很对就是过不去,最后没办法,只能二分答案,

#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>

int n, m, s, t;
vector<pair<int,int>>e[1010]; 
int val[1010], st[1010], dist[1010], pre[1010];

bool dij(int mid){
	priority_queue<pii, vector<pii>, greater<pii>>q;
	memset(pre, -1, sizeof pre);
	memset(st, 0, sizeof st);
	memset(dist, 0x3f, sizeof dist);
	q.push({0, s});
	while(q.size()){
		auto k = q.top();
		q.pop();
		int d = k.first;
		int id = k.second;
		if(st[id]){
			continue;
		}
		st[id] = 1;
		for(auto [x, y] : e[id]){
			if(val[x] > mid && x != t){
				continue;
			}else{
				if(y + d < dist[x]){
					dist[x] = y + d;
					q.push({dist[x], x});
				}
			}
		}
	}
	if(dist[t] == 0x3f3f3f3f){
		return false;
	}
	return true;
}

void solve(){
	cin >> n >> m;
	cin >> s >> t;
	int ma = -1, mi = 0x3f3f3f3f;
	for(int i = 1;i <= n;i ++){
		cin >> val[i];
		ma = max(ma, val[i]);
		mi = min(mi, val[i]);
	}
	
	for(int i = 0;i < m;i ++){
		int x, y, z;
		cin >> x >> y >> z;
		e[x].push_back({y, z});
		e[y].push_back({x, z});
	}
	int l = mi - 1, r = ma + 1;
	while(l + 1 != r){
		int mid = l + r >> 1;
		if(dij(mid)){
			r = mid;
		} else{
			l = mid;
		}
	}
	if(!dij(r)){
		cout << "Impossible";
	}else{
		cout << dist[t] << ' ' << r << endl;
	}
}

int main(){
	int t = 1;
	while(t --){
		solve();
	}
} 

赛后秒出正解,服了啊,错误原因是我建边建错了

 

​编辑

#include<bits/stdc++.h>
using namespace std;
#define pii pair<pair<int,int>,int>

int n, m, s, t;
vector<pair<int,int>>e[1010]; 
int val[1010], st[1010], dist[1010], pre[1010];
int res[1010];

bool dij(){
	priority_queue<pii, vector<pii>, greater<pii>>q;
	memset(pre, -1, sizeof pre);
	memset(st, 0, sizeof st);
	memset(dist, 0x3f, sizeof dist);
	q.push({{0, 0}, s});
	while(q.size()){
		auto k = q.top();
		q.pop();
		int d = k.first.first;
		int v = k.first.second;
		int id = k.second;
		if(st[id]){
			continue;
		}
		st[id] = 1;
		for(auto [x, y] : e[id]){
			if(dist[x] > y + d){
				dist[x] = y + d;
				pre[x] = id;
				res[x] = max(v, val[x]);
				q.push({{dist[x], res[x]}, x});
			}else if(dist[x] == y + d && res[x] > v){
				res[x] = max(val[x], v);
				pre[x] = id;
				q.push({{dist[x], res[x]}, x});
			}
		}
	}
	if(dist[t] == 0x3f3f3f3f){
		return false;
	}
	return true;
}

void solve(){
	cin >> n >> m;
	cin >> s >> t;
	for(int i = 1;i <= n;i ++){
		cin >> val[i];
	}
	val[s] = 0;
	val[t] = 0;
	for(int i = 0;i < m;i ++){
		int x, y, z;
		cin >> x >> y >> z;
		e[x].push_back({y, z});
		e[y].push_back({x, z});
	}
	if(!dij()){
		cout << "Impossible";
	}else{
		cout << dist[t] << ' ' << res[t];
	}
}

int main(){
	int t = 1;
	while(t --){
		solve();
	}
} 

这次比赛很糟糕,但是也学到了不少东西。下次注意

标签:抗国赛,dist,val,int,else,2024,st,1010,赛后
From: https://www.cnblogs.com/litianyu1969/p/18342286

相关文章

  • Java面试题 2024年
    1、String/StringBuffer/StringBuilder区别        String是一个不可变的字符序列,每次对String进行修改时都会创建一个新的String对象。因此,在频繁操作字符串的情况下,会产生大量的垃圾对象,影响性能。        StringBuffer和StringBuilder是可变的字符序列,可......
  • 2024.8广东集训体验/感受
    2024.8广东集训体验/感受出于某些不明原因,我并不方便点名道姓这次集训所在学校是哪一所学校,因此我将称其为"最美中学".FunFact:我甚至找不到一篇较官方的文档介绍这些最美中学,真是个草台班子.写这篇文章并不想单纯的开喷,我要从好坏两个方面描述一下这所中学.首先说一下好......
  • 2024 年华数杯全国大学生数学建模竞赛 C 题 老外游中国 第一问代码
    请问352个城市中所有35200个景点评分的最高分(BestScore,简称BS)是 5.0importosimportpandasaspd#数据集所在的文件夹路径data_folder='附件'#初始最高评分设为一个较小的值,确保能找到比它更大的评分max_bs=float('-inf')#获取数据集文件夹中所有......
  • 【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)
    ......
  • 【全网首发】2024华数杯数学建模ABC题选题分析+解题思路代码+成品论文更新
    建议选哪道题?A题特点:数理分析题目此题难度较大与国赛难度较为贴近B题特点B题以运筹学/网络科学,图论、优化问题为主,涉及到的概念多,对基础要求较高,不建议优先选择。常用MATLAB函数例如toposort(有向无环图的拓扑顺序)、isomorphism(计算两个图之间的同构)、centrality(衡量节点......
  • 科大讯飞P30、小度K16、优学派U59区别 2024最具性价比学习机推荐
    科大讯飞AI学习机P30是一款为小学到高中学生设计的全能型学习平板。它配备了6GB的运行内存和256GB的存储空间,能够轻松运行各种学习应用和存储大量学习资料。11英寸的大屏幕采用护眼设计,能够有效减少蓝光辐射,保护学生视力。P30覆盖了从小学到高中的全科目课程,配合科大讯飞的AI技术,......
  • KubeSphere 社区双周报| 2024.07.19-08.01
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.07.19-08.01。贡献者名单新晋KubeSpherecontribu......
  • 【笔记】数论 2024.8.4
    幂数!#6222.幂数!(加强版)-Problem-LibreOJ(loj.ac)转写为\(a^2b^3\)要求\(b\)没有平方因子,这样是双射对应。那么即求\[\sum_{i=1}^{\sqrt[3]{n}}\mu^2(i)\left\lfloor\sqrt{\frac{n}{i^3}}\right\rfloor\]后面那个大根号可以整除分块?转化为求\(\mu^2(i)\)的前缀和......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(4)
    题面:https://files.cnblogs.com/files/clrs97/%E7%AC%AC%E5%9B%9B%E5%9C%BA%E9%A2%98%E9%9D%A2.pdf题解:https://files.cnblogs.com/files/clrs97/%E7%AC%AC%E5%9B%9B%E5%9C%BA%E9%A2%98%E8%A7%A3.pdf Code:A.超维攻坚#include<cstdio>constintN=15,inf=~0U>>......
  • 2024年电赛H题--自动行驶小车思路分享
    题目第一问:按照题目要求,小车从A点走到B点,实际上就是走固定直线,可以衍生出以下几种方案,声光提示想必大家都会,这里不做赘述方案一:速度环+位置环原理:利用速度环来控制两个轮子编码器数值(速度)一致,因此可以控制小车方向,利用位置环控制小车路程长短,使小车移动固定距离,但此方案属......