一.题目目录
|----|----------|
| 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;
}