abc 246A-D

A

这题考试的时候直接自闭了?!

思路

输出与其他两个不一样的x,y。

#include<iostream>
using namespace std;
int main(){
	int x1,x2,x3,y1,y2,y3;
	cin>>x1>>y1>>x2>>y2>>x3>>y3;
	if(x1==x2)cout<<x3<<" ";
	if(x2==x3)cout<<x1<<" ";
	if(x1==x3)cout<<x2<<" ";
	if(y1==y2)cout<<y3;
	if(y2==y3)cout<<y1;
	if(y1==y3)cout<<y2;
}

B

考试的时候这题英语有点难懂,对着样例研究了半天,写出来了。

思路

给一个点A(x,y),与原点O组成的向量OA
求这个方向的 单位向量 的坐标。

code

#include<bits/stdc++.h>
int main(){
	double a,b;scanf("%lf %lf",&a,&b);
	printf("%.12f %.12f",a/sqrt(a*a+b*b),b/sqrt(a*a+b*b));
}

C

好久没做贪心了,考试遇到了居然写出来了。
有N件商品的价格,K张价值为X的优惠券。可对任意商品使用任意张优惠券,最高优惠价格为此商品的价格。求买完最少花多少钱。

思路

把商品从大到小排序,能用满的优惠券用满,并把价格减去。
剩余的商品再从大到小排序,还有剩余优惠券肯定是免单大件的,输出剩下不能免单的之和。

code

#include<bits/stdc++.h>
using namespace std;
long long n,k,x,a[200000],ans,t;
int main(){
	cin>>n>>k>>x;
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a,a+n,greater<int>());
	while(k>0&&t<n){
		if(a[t]<x)break;
		int kk=min(k,a[t]/x);
		a[t++]-=x*kk;
		k-=kk;
	}
	sort(a,a+n,greater<int>());
	for(int i=k;i<n;i++)ans+=a[i];
	cout<<ans;
}

D

没做出来。
要找最小的大于等于n的f。

思路

f(a,b)是一个二元三次函数,且保证了N<=1e18;所以a,b<1e6。
这个复杂度是可以暴力的。
找到j=0为止,最小的X肯定是答案。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll X(ll a,ll b){return a*a*a+a*a*b+a*b*b+b*b*b;}
ll n,x=9e18,j=1e6;
int main(){
	cin>>n;
	for(ll i=0;i<=1e6;i++)
		while(X(i,j)>=n&&j>=0)x=min(x,X(i,j)),j--;
	cout<<x;
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值