CSP-J复赛模拟赛2————赵义弘补题报告

一.题目目录

|----|----------|
| T1 | 简单的问题 |
| T2 | 寻找"五维空间" |
| T3 | 约定 |
| T4 | 遗忘的过去 |

二.模拟赛题目期望得分

T1:100

T2: 60

T3: 60

T4: 80

因为蒟蒻自己没有参加这场模拟赛,所以就只有期望得分了

三.比赛分析

T1:[简单的问题(problem)]

题目大意:给你一个分段函数求它的一些对应的函数值
思考过程:读了一遍题以后发现这道题的数据范围
对于30%的数据,𝑥≥101

另外40%的数据,𝑥≤10
对于100%的数据,𝑥≤1000000

如果你想要AC一定要将cin和cout改成scanf和printf
同时蒟蒻我看了一下上面的题目描述和输入和输出样例,发现:如果x是小于等于100时,那么输出的答案一定是91。如果x是大于等于101时输出的答案一定是x-10
代码实现(由于蒟蒻我的辟谷报废了,所以蒟蒻我是现写的代码,写的可能不大好)
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x;
	while(~scanf("%d",&x)&&x!=0){
		if(x>=101) printf("%d\n",x-10);
		else printf("91\n",91);
	}
	return 0;
}

我觉得是T1题因该不会有人AC不了吧

T2:[寻找"五维空间"(space)]

题目大意:帮助两个帅哥(小A和小C)找到要求的最简真分数。
思考过程:在看到这个样例的蒟蒻我都蒙了,这啥呀

仔细一看后我发现199/299约等于三分之二,也就是输入样例的第一行,至于输入样例的第二行则是输出样例的两个数所在的区间范围,那了解样例后的蒟蒻我就是无敌的。(后面会打脸)

代码实现:

自信的蒟蒻提交了代码

自信的蒟蒻寄了(只有60分)

毕竟失败乃成功他娘,错误代码也是要放出来的

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int x,y;
int n,d,m;
int ans=1.0*100000000000;
int X,Y;
int inf;
int gcd(int x,int y){
    if(y==0) return x;
    gcd(y,x%y);
}
bool check(int x,int y){
    if(x==n&&y==d) return 0;
    if(gcd(x,y)!=1) return 0;
    return 1;
}
int main(){
    cin>>n>>d>>m;
    double p=1.0*n/d;
    double ans=inf;
    for(int x=1;x<m;x++){
        for(int y=x+1;y<=m;y++){
            if(check(x,y)){
                double now=1.0*x/y;
                if(abs(ans-p)>abs(now-p)){
                	ans=now;
					X=x;
					Y=y; 
				}
            }
        }
    }
    cout<<X<<" "<<Y<<endl;
    return 0;
}

再听完老师对这道题目的细致讲解后,我应该理解了(但是我的代码还没有改完,所以放的是60分的代码,可恶的TLE)

T3:[约定(agreement)]

题目大意:神秘人(姑且叫他小s吧)需要知道通过尝试不同的排列最多能够获得多少灵力值(一种排列恰好有 𝑘 个"有效关系",那么摆出这样的排列就能提供 1点灵力值,同一种排列只会提供一次灵力值)
由于这个问题的答案可能非常的大,小A根本算不明白,而小s只会魔法,于是小A希望你能帮他解决这个问题。答案对2012取模
思考过程:先看样例
从样例中我们得知了输入样例的第一个为n(3)张魔法牌,而输入样例中的第二个则告诉我们了一共有k(1)种"有效关系"。从输出样例中我们知道了对于输出样例来说共有四种排列的结果,分别是[3,1,2],[2,1,3],[1,3,2],[2,3,1]而这四种排列的结果只有一个"有效关系",所以输出4.
代码实现:
蒟蒻我在老师的讲解下,完成了这道题目
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int dp[1005][1005];
int main(){
    cin>>n>>k;
    for(int i=0;i<=n;i++) dp[i][0]=1;
    	for(int i=1;i<=1000;i++){
    		for(int j=1;j<=1000;j++){
            	dp[i][j]=dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1);
            	dp[i][j]%=2012;
        }
	} 
    cout<<dp[n][k];
    return 0;
}

一定要注意要把dp这个数组初始化一下,否则就会直接输出0

加上那个dp[i][0]=1,就能过了

T4[遗忘的过去(forget)]

题目大意:蒟蒻我感觉很像d4的supermarket,好像就改了个样例和输入和输出,实话说看supermarket好像懂得更快,推荐去看d4的supermarket

废话不多说,直接上代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=100005; 
priority_queue<int,vector<int>,greater<int> > qu;
int n,cnt=0;
struct node{
	int maxt,v;
}a[N];
bool cmp(node x,node y){
	if(x.maxt==y.maxt) return x.v<y.v;
	return x.maxt<y.maxt;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].maxt;
	}
	for(int i=1;i<=n;i++){
		cin>>a[i].v;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		qu.push(a[i].v);
		if(qu.size()>a[i].maxt){
			qu.pop();
		}
	}
	while(!qu.empty()){
		cnt+=qu.top();
		qu.pop();
	}
	cout<<cnt;
	return 0;
}
相关推荐
一勺汤21 分钟前
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·目标跟踪
每天写点bug38 分钟前
【golang】map遍历注意事项
开发语言·算法·golang
程序员JerrySUN1 小时前
BitBake 执行流程深度解析:从理论到实践
linux·开发语言·嵌入式硬件·算法·架构
王老师青少年编程1 小时前
gesp(二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵
数据结构·c++·算法·gesp·csp·信奥赛
robin_suli2 小时前
动态规划子序列问题系列一>等差序列划分II
算法·动态规划
cxylay3 小时前
自适应滤波算法分类及详细介绍
算法·分类·自适应滤波算法·自适应滤波·主动噪声控制·anc
茶猫_3 小时前
力扣面试题 - 40 迷路的机器人 C语言解法
c语言·数据结构·算法·leetcode·机器人·深度优先
轻浮j3 小时前
Sentinel底层原理以及使用算法
java·算法·sentinel
Abelard_3 小时前
LeetCode--347.前k个高频元素(使用优先队列解决)
java·算法·leetcode
小猪写代码3 小时前
C语言:递归函数(新增)
算法·c#