开始 2020-10-31 18:30:00

2020秋Y1班第一次综合测

结束 2020-10-31 19:55:00
Contest is over.
当前 2024-11-28 11:55:19

T1

周期性问题,虽然逐个枚举判断也能处理,但是最优解为考虑不完整后期中的有效游泳天数。

// 题目编号:12401 - 小鱼的航程(改进版)
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x,n,y,ans=0;
	cin>>x>>n;
	for(int i=x;i<=x+n%7-1;i++)
		if(i%7!=0&&i%7!=6) ans++;
	cout<<(ans+n/7*5)*250;
	return 0;
}

T2

水题,主要题意理解清楚,如果某个人的取药无法完成,下一个人继续

// 题目编号:13416 - 药房管理
#include<bits/stdc++.h>
using namespace std;
int main(){
	int m,n,num,ans=0;
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>num;
		if(m>=num) m-=num;
		else ans++;
	}
	cout<<ans;
	return 0;
}

T3

模拟除法运算过程,循环处理

// 题目编号:13441 - 求小数的某一位
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b,n,s;
	cin>>a>>b>>n;
	a*=10;
	for(int i=1;i<=n;i++){
		s=a/b;
		a=a%b*10;
	}
	cout<<s;
	return 0;
}

T4

辗转相除法,注意数据范围,要开 long long

// 题目编号:221249 - 求最大公约数
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long a,b,y;
	cin>>a>>b;
	while(a%b!=0){
		y=a%b;
		a=b;
		b=y;
	}
	cout<<b;
	return 0;
}

T5

为提高效率,此题要通过递推公式先打表,填充数组。 递推公式易得 f(n)=f(n-1)+2*f(n-2)

// 题目编号:31014 - 小明的烦恼
#include<bits/stdc++.h>
using namespace std;
int a[31],n,num;
int main(){
	a[1]=1,a[2]=3;
	for(int i=3;i<=30;i++)
		a[i]=a[i-1]+2*a[i-2];
	cin>>n;
	while(n--){
		cin>>num;
		cout<<a[num]<<endl;
	}
	return 0;
}

T6

01背包模板题

// 题目编号:62001 - 01背包问题
#include<bits/stdc++.h>
using namespace std;
int m=10,n=4,maxv=0,w[50],v[50],f[201];
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
	}

	for(int i=1;i<=n;i++){
        // 这里要逆序推导
		for(int j=m;j>=w[i];j--){
			f[j]=max(f[j],f[j-w[i]]+v[i]);
		}
	}

	cout<<f[m];
	return 0;
}

同学们要理解,并在题库中找到题目AC,切勿CTRL C!