7.24集训 复盘+总结

目录

一、初赛模拟题训练

Problem 暴露的问题

Solution 暴露问题的解决方案

一些错题的题解

二、复赛模拟题

第一题

题目

 ​编辑

 题解

第二题

题目

 题解

谢谢大家! 跪求点赞!


一、初赛模拟题训练

Problem 暴露的问题

选择题耗时太久。主要是废了半天劲算出来一个结果,但是却发现没有这个选项,让人很崩溃,严重影响心态,导致越做越错,恶性循环。

Solution 暴露问题的解决方案

可以在草稿纸上写一些积极的鼓励,让自己保持乐观。

写一步,检查一步,尽可能避免出现错误.

一些错题的题解

 这题其实是有规律的:完全二叉树的叶子个数是  n 整除 2

n 整除 2 = 617 \therefore选C

 这题其实有一个用栈可以很好解决的方法:将数字放入栈中,碰到运算符取出两数字,并将结果重新放入。推一下就可以得到结果37,故选A。

二、复赛模拟题

第一题

题目

 

 题解

50分代码:暴力

#include<bits/stdc++.h>
using namespace std;
int x,y;
bool is_prime(int n){//判断质数
	if(n==1)
		return false;
	if(n==2)
		return true;
	for(int i=2;i<=sqrt(n);i++)
		if(n%i==0)	return false;
	return true;
}
bool check(int n){
	while(n){
		if(!is_prime(n)) return false;
		n/=10;//删除最后一位
	}
	return true;
}
int main(){
	//freopen("prime.in","r",stdin);
	//freopen("prime.out","w",stdout);
	cin>>x>>y;
	for(int i=x;i<=y;i++){
		if(check(i)){
			cout<<i<<endl;
		}
	}
}

100分正解:可以发现10^7以内幸运质数很少,通过暴力代码打表(将幸运质数存入数组)再搜索即可。

#include<iostream>
#include<cmath>
using namespace std;
int a[] = { 2,3,5,7,23,29,31,37,53,59,71,73,79,233,239,293,311,313,317,373,379,593,599,719,733,739,797,2333,2339,2393,2399,2939,3119,3137,3733,3739,3793,3797,5939,7193,7331,7333,7393,23333,23339,23399,23993,29399,31193,31379,37337,37339,37397,59393,59399,71933,73331,73939,233993,239933,293999,373379,373393,593933,593993,719333,739391,739393,739397,739399,2339933,2399333,2939999,3733799,5939333,7393913,7393931,7393933 };
//以上为打表
int x, y;
int main() {
	cin >> x >> y;
	for (int i = 0; i < 78; i++) {
		if (a[i] >= x && a[i] <= y)
			cout << a[i] << endl;
	}
}

第二题

题目

 题解

这是一道邻接表和拓扑排序的模板题。用邻接表存图,再拓扑排序。拓扑排序用优先队列,每次优先取最小的点。

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
using pii = pair<int, int>;
const int maxN = 1e5 + 5;
int n, m, w, ans;
int a[maxN], b[maxN], in[maxN];
vector<int> adj[maxN];
priority_queue<pii, vector<pii>, greater<pii> > q;
int main() {
	cin >> n >> m >> w;
	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 <= m; i++) {
		int u, v;
		cin >> u >> v;
		adj[u].push_back(v);
		++in[v];
	}
	for (int i = 1; i <= n; i++) {
		if (in[i] == 0)
			q.push(pii(a[i], i));
	}
	while (!q.empty()) {
		int u = q.top().second;
		if (a[u] > w) {
			break;
		}
		w += b[u], ans++;
		q.pop();	
		for (int v : adj[u]) {
			if (--in[v] == 0) {
				q.push(pii(a[v],v));
			}
		}
	}
	cout << ans;
	
}

谢谢大家! 跪求点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值