第一题

题目描述 在一个古老的文明中,有一种神秘的金币。你是一名考古学家,偶然发现了这个文明的遗址,现在是时刻00,有nn枚金币同时被发现。第ii枚金币会在 titi时刻后消失,它的价值是vivi​ 。然而,由于地形和其他条件的限制,你每个时刻只能收集一枚金币。此外,你的背包有限,你最多只能收集kk枚币。现在,你面前有nn枚金币,你的任务是确定如何选择金币,以便在收集的金币数量不超过kk的前提下,最大化你可以获取的金币价值总和。 注意:金币被收集到背包之后就不会消失了。

思路 先排除废物信息titi,输入完后,将vivi排序然后求n-k到n 内的总和最后求和

错误原因 无,对了嘻嘻嘻😊😊😊 正确代码

#include<bits/stdc++.h>
//#include<windows.h>
#pragma GCC optimize(3)
using namespace std;
long long a[1000005];
long long sum=0;
int main(){
	freopen("coin.in","r",stdin);
	freopen("coin.out","w",stdout);
	ios::sync_with_stdio (0);
	cin.tie(0), cout.tie(0);
	long long n,k;
	cin>>n>>k;
	for(long long i=0;i<n;i++){
		long long x;
		cin>>x;
	}
	for(long long i=0;i<n;i++) cin>>a[i];
	sort(a,a+n);
	for(long long i=n-k;i<n;i++) sum+=a[i];
	cout<<sum;
	return 0;
}

第二题

题目描述 牛牛上小学二年级了,现在他开始学习乘法。经过老师的悉心教导,牛牛已经能够算出a,ba, b两个数字的乘积了。结果老师发现,牛牛是偷偷拿到了老师的练习题答案,背下答案之后才说对了乘积!老师非常愤怒,决定给牛牛出更多的乘法题目,现在老师打算对a,ba, b这两个数字的数位进行交换,这样就可以构造出新的数字来考牛牛乘法了。例如原来的两个数字a,ba, b1234123456785678,那么他可以交换两个数字的千位,使得两个数字变成5234523416781678,然后再计算它们的乘积。老师只会交换相同位置的数位,例如交换两个数字的千位,或者交换两个数字的百位,但是不能交换一个数字的千位和另一个数字的百位(例如交换出62345178不被允许的)(例如交换出6234 和 5178 不被允许的)。老师可以进行无限次交换操作最终得到新的字a1a1, b1b1,请问新的两个数字的乘积最大是多少。 思路 第一位不换,从第一位开始后面的每一位都按a[i]>b[i]a[i]>b[i]就交换a[i]a[i]b[i]b[i]

错误原因 因为最后的时候把第四题的套分不小心交上去了

正确代码

#include<bits/stdc++.h>
using namespace std;
string n,m,z;
long long sum,ans,cnt;
int main(){
	freopen("mul.in","r",stdin);
	freopen("mul.out","w",stdout);
	cin>>n>>m;
	if(n<m){
		swap(n,m);
	}
	bool f=0;
	for(int i=0;i<n.size();i++){
		if(n[i]>m[i]){
			if(f==1)swap(n[i],m[i]);
			f=1;
		}
	}
	for(int i=0;i<n.size();i++){
		sum=sum*10+n[i]-'0';
		ans=ans*10+m[i]-'0';
	}
	cout<<sum*ans;
	return 0;
}

第三题

题目描述 牛牛因为数学太差被老师赶出教室了,虽然老师侵犯了牛牛的公平教育权,但是牛牛在教室外的小卖部大彻大悟,提升了自己的数学水平。故事是这样的:学校里的小卖部里有一个活动:只要有三个饮料瓶就可以换一瓶新的饮料。现在牛牛从路边捡到了1010个饮料瓶,于是牛牛开始兑换饮料。他的兑换操作如下:先用99个饮料瓶换33瓶饮料,喝完。然后手里有44个饮料瓶,再拿出33个换 1 瓶饮料,这时手里有22个饮料瓶。牛牛再问老板借11瓶饮料,喝完之后又了 11个饮料瓶,然后拿33个饮料瓶换11瓶饮料还给老板。有借有还,再借不难。在这个过程中,牛牛总共喝了55瓶料。 牛牛现在有nn个饮料瓶,小卖部的活动是每kk个饮料瓶能换一瓶饮料,牛牛最多能喝几瓶饮料?牛牛已经大彻大悟,现在他拿这道题来考你,他希望你和他一样大彻大悟。

思路 推出公式n/(k1)n/(k-1) 然后再用高精度除法模板推出传进去的参数(a,k1)(a,k-1) 最后相除

错误原因 因为没有推出公式

正确代码

#include<bits/stdc++.h>
using namespace std;
vector<int> div(vector<int> A,long long b) {
	vector<int> C;
	long long t=0;
	for(int i=0;i<A.size();i++){
		t=t*10+A[i];
		C.push_back(t/b);
		t=t%b;
	}
	reverse(C.begin(),C.end());
	while(C.size()>1&&C.back()==0)
		C.pop_back();
	return C;
}
int main(){
	freopen("drink.in","r",stdin);
	freopen("drink.out","w",stdout);
	string a;
	long long b;
	cin>>a>>b;
	vector<int> A;
	for(int i=0;i<a.size();i++)
		A.push_back(a[i]-'0');
	vector<int> C;
	C=div(A,b-1);
	for(int i=C.size()-1;i>=0;i--)
		cout<<C[i];
	return 0;
}

0 条评论

目前还没有评论...