AtCoder Beginner Contest 246 ABC题

目录

A

问题陈述

约束

输入

输出

示例输入 1 复制

示例输出 1 复制

示例输入 2 复制

示例输出 2 复制

B

问题陈述

约束

输入

输出

示例输入 1 复制

示例输出 1 复制

示例输入 2 复制

示例输出 2 复制

示例输入 3 复制

示例输出 3 复制

c

问题陈述

约束

输入

输出

示例输入 1 复制

示例输出 1 复制

示例输入 2 复制

示例输出 2 复制

示例输入 3 复制

示例输出 3 复制


A

A - 四点社论

 / 


时间限制: 2 秒 / 内存限制: 1024 MB

得分 : 积分100100

问题陈述

-平面中有一个矩形。此矩形的每个边都平行于 - 或 - 轴,并且其面积不为零。xyxyxxyy

给定此矩形的四个顶点中的三个的坐标, , 和 ,找到另一个顶点的坐标。(x_1, y_1)(x1​,y1​)(x_2, y_2)(x2​,y2​)(x_3, y_3)(x3​,y3​)

约束

  • -100 \leq x_i, y_i \leq 100−100≤xi​,yi​≤100
  • 唯一存在一个矩形,其中所有 , 作为顶点,平行于 - 或 - 轴的边以及非零区域。(x_1, y_1)(x1​,y1​)(x_2, y_2)(x2​,y2​)(x_3, y_3)(x3​,y3​)xxyy
  • 输入中的所有值都是整数。

输入

输入从标准输入以下列格式提供:

x_1x1​ y_1y1​
x_2x2​ y_2y2​
x_3x3​ y_3y3​

输出

按以下格式打印由空格分隔的所查找坐标:(x, y)(x,y)

xx yy

示例输入 1 复制

复制
-1 -1
-1 2
3 2

示例输出 1 复制

复制
3 -1

带顶点的矩形的另一个顶点是 。(-1, -1), (-1, 2), (3, 2)(−1,−1),(−1,2),(3,2)(3, -1)(3,−1)


示例输入 2 复制

复制
-60 -40
-60 -80
-20 -80

示例输出 2 复制

复制
-20 -40

 

我的笨蛋方法,说来惭愧,我是把所有的情况枚举了一遍哈哈哈

 

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

大佬的题解

#include <iostream>
using namespace std;
int main(void)
{
  int x_1, x_2, x_3, y_1, y_2, y_3, x_ans, y_ans;
  
  cin >> x_1 >> y_1;
  cin >> x_2 >> y_2;  
  cin >> x_3 >> y_3;
  
  if(x_1 == x_2) x_ans = x_3;
  if(x_2 == x_3) x_ans = x_1;  
  if(x_3 == x_1) x_ans = x_2;  
  
  if(y_1 == y_2) y_ans = y_3;
  if(y_2 == y_3) y_ans = y_1;  
  if(y_3 == y_1) y_ans = y_2;
  
  cout << x_ans << " " << y_ans << endl;
  
  return 0;
}

别着急还有,我学长的题解yyds!!!!!把异或运用上去了,简直了

#include<iostream>
using namespace std;
int main(){
	int x1,y1,x2,y2,x3,y3,x4,y4;
	cin>>x1>>y1;
	cin>>x2>>y2;
	cin>>x3>>y3;
	x4 = x1^x2^x3;
	y4 = y1^y2^y3;
	cout<<x4<<" "<<y4<<endl;
	return 0;
}

B

 B - 走近社论

 / 


时间限制: 2 秒 / 内存限制: 1024 MB

得分 : 积分200200

问题陈述

从二维平面中的点开始,让我们向该点移动距离。移动后找到我们的坐标。(0,0)(0,0)11(A, B)(A,B)

在这里,在将距离从一个点移动到一个点(段的长度)之后,我们位于段上的距离为 的点。
约束保证点和 点之间的距离至少为 。ddXXYYd \led≤XYXYXYXYXXdd(0, 0)(0,0)(A, B)(A,B)11

约束

  • 输入中的所有值都是整数。
  • 0 \le A,B \le 10000≤A,B≤1000
  • (A,B) \neq (0,0)(A,B)=(0,0)

输入

输入从标准输入以下列格式提供:

AA BB

输出

让我们成为我们搬家后的坐标。打印并按此顺序,用空格分隔。
当对于每个印刷值,法官的答案的绝对或相对误差最多为 时,您的输出被认为是正确的。(x, y)(x,y)xxyy10^{−6}10−6


示例输入 1 复制

复制
3 4

示例输出 1 复制

复制
0.600000000000 0.800000000000

例如,打印也将被接受。0.5999999999 0.8000000001


示例输入 2 复制

复制
1 0

示例输出 2 复制

复制
1.000000000000 0.000000000000

我们可能会到达.(A, B)(A,B)


示例输入 3 复制

复制
246 402

示例输出 3 复制

复制
0.521964870245 0.852966983083

 

直接上题解

 

#include<bits/stdc++.h>
using namespace std;
int main(){
  int x,y;
  cin >> x >> y;
  int d2=x*x+y*y;
  double d=d2;
  d=sqrt(d);
  double dx=x,dy=y;
  cout << dx/d << ' ' << dy/d << '\n';
  return 0;
}

c

 C - 优惠券社论

 / 


时间限制: 2 秒 / 内存限制: 1024 MB

得分 : 积分300300

问题陈述

商店里有商品。对于每个 ,第 -项的价格是日元(日本的货币)。NNi = 1, 2, \ldots, Ni=1,2,…,NiiA_iAi

高橋有优惠券。
每张优惠券可用于一件商品。您可以在同一商品上使用任意数量的优惠券,可能为零。在价格为日元的商品上使用优惠券可以让您以日元的价格购买。KKkkaa\max\lbrace a - kX, 0\rbracemax{akX,0}

打印高桥购买所有物品所需的最低金额。

约束

  • 1 \leq N \leq 2 \times 10^51≤N≤2×105
  • 1 \leq K, X \leq 10^91≤K,X≤109
  • 1 \leq A_i \leq 10^91≤Ai​≤109
  • 输入中的所有值都是整数。

输入

输入从标准输入以下列格式提供:

NN KK XX
A_1A1​ A_2A2​ \ldots… A_NAN

输出

打印答案。


示例输入 1 复制

复制
5 4 7
8 3 10 5 13

示例输出 1 复制

复制
12

通过在 -st 项目上使用优惠券,在 -rd 项目上使用优惠券,在 -th 项目上使用优惠券,Takahashi 可以:111111332255

  • 用日元购买-st项目,11\max\lbrace A_1-X, 0 \rbrace = 1max{A1​−X,0}=1
  • 以日元的价格购买-nd项目,22\max\lbrace A_2, 0 \rbrace = 3max{A2​,0}=3
  • 以日元的价格购买-rd项目,33\max\lbrace A_3-X, 0 \rbrace = 3max{A3​−X,0}=3
  • 以日元的价格购买第-件商品,44\max\lbrace A_4, 0 \rbrace = 5max{A4​,0}=5
  • 以日元的价格购买第-件商品,55\max\lbrace A_5-2X, 0 \rbrace = 0max{A5​−2X,0}=0

总共日元,这是最低可能的价格。1 + 3 + 3 + 5 + 0 = 121+3+3+5+0=12


示例输入 2 复制

复制
5 100 7
8 3 10 5 13

示例输出 2 复制

复制
0

示例输入 3 复制

复制
20 815 60
2066 3193 2325 4030 3725 1669 1969 763 1653 159 5311 5341 4671 2374 4513 285 810 742 2981 202

示例输出 3 复制

复制
112

 

这一题比赛的时候用暴力写的哈哈,然鹅。。。不太行 

我的暴力方法

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1e6;
typedef long long LL;
LL n,k,x;
int a[N];
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cin>>n>>k>>x;
	LL i,j;	
	for(i = 0;i<n;i++){
		cin>>a[i];
	}
	
	for(i = 0;i<n;i++){
		while(a[i]>=x&&k>0){
			a[i] -=x;
			k--;
		
		}
	}
	if(k>0){
		sort(a,a+n);
		for(j = n-1;j>n-1-k;j--){
			a[j]-=x;
			if(a[j]<0){
				a[j] = 0;
			}
		}
	}
	LL s = 0;
	for(i = 0;i<n;i++){
		s+=a[i];
	}
	cout<<s;
	return 0;
}

结果就是

 暴力不行,时间复杂度太高,放弃

来看题解

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll n, k, x;
ll a[200005];
int main(void)
{
  cin >> n >> k >> x;
  for(int i = 1; i <= n; i++) cin >> a[i];
  
  ll ans = 0;
  for(int i = 1; i <= n; i++) ans += a[i];
  
  ll m = 0;
  for(int i = 1; i <= n; i++) m += a[i]/x;
  m = min(m, k);
  ans -= m*x, k -= m;
  
  for(int i = 1; i <= n; i++) a[i] %= x;
  sort(a+1, a+n+1);
  
  for(int i = n; i >= 1; i--){
    if(k == 0) break;
    ans -= a[i], k--;
  }
  
  cout << ans << endl;
  
  return 0;
}

明天再见~~

  • 33
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级小何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值