BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解
Posted ZZXzzx0_0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解相关的知识,希望对你有一定的参考价值。
A - 神秘的老者
思路:
输
出
m
i
n
(
n
∗
a
,
b
)
即
可
输出min(n* a,b)即可
输出min(n∗a,b)即可
时间复杂度:
O
1
O1
O1
#include<bits/stdc++.h>
using namespace std;
int main()
int n,a,b;
cin>>n>>a>>b;
cout<<min(n*a,b)<<endl;
B - 借钱
思路:
暴
力
枚
举
即
可
暴力枚举即可
暴力枚举即可
判
断
一
个
浮
点
数
d
是
否
是
整
数
判断一个浮点数d是否是整数
判断一个浮点数d是否是整数
f
a
b
s
(
d
−
(
i
n
t
)
d
)
<
=
1
e
−
8
fabs(d-(int)d)<=1e-8
fabs(d−(int)d)<=1e−8
时间复杂度:
O
n
2
∗
d
On^2*d
On2∗d
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int N = 1e6 + 10 , M = 3010 , mod = 1e9 + 7 ;
const double eps = 1e-7 , pi = acos(-1.0) ;
int n , d ;
int a[M][M] ;
double get(int a[] , int b[]) // 返回a这个点与b这个点的距离
double res = 0 ;
fer(i,1,d) res = res + (a[i] - b[i]) * (a[i] - b[i]) ;
return sqrt(res) ;
signed main()
cin >> n >> d ;
fer(i,1,n) fer(j,1,d) sf(a[i][j]) ;
int res = 0 ;
fer(i,1,n)
fer(j,i + 1 , n)
double d = get(a[i],a[j]) ;
if(fabs(d - (int)d) <= 1e-7)
res ++ ;
cout << res << "\\n" ;
return 0;
C - 最小值-2019
思路:
首
先
由
取
余
的
性
质
得
首先由取余的性质得
首先由取余的性质得
(
i
∗
j
)
%
m
o
d
=
i
%
m
o
d
∗
j
%
m
o
d
(i * j)\\%mod=i\\%mod*j\\%mod
(i∗j)%mod=i%mod∗j%mod
若
r
−
l
+
1
>
=
2019
若r - l + 1 >= 2019
若r−l+1>=2019
必
定
存
在
一
个
数
x
必定存在一个数x
必定存在一个数x
使
得
x
属
于
区
间
[
l
,
r
]
使得x属于区间[l,r]
使得x属于区间[l,r]
并
且
x
%
2019
=
0
并且x\\%2019=0
并且x%2019=0
那
么
当
前
最
小
值
必
定
为
0
那么当前最小值必定为0
那么当前最小值必定为0
否
则
考
虑
暴
力
n
2
遍
历
一
遍
即
可
否则考虑暴力n^2遍历一遍即可
否则考虑暴力n2遍历一遍即可
时间复杂度:
O
n
2
On^2
On2
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f ;
const int N = 1e6 + 10 , M = 3010 , mod = 1e9 + 7 ;
const double eps = 1e-7 , pi = acos(-1.0) ;
signed main()
int l , r ;
cin >> l >> r ;
if((r - l + 1) >= 2019) puts("0") ;
else
int res = inf ;
fer(i,l,r)
fer(j,i + 1 , r)
res = min(res,i * j % 2019) ;
cout << res << "\\n" ;
return 0;
D - 山 or 水库 ?
思路:
假
设
第
i
座
山
的
雨
量
为
b
[
i
]
假设第i座山的雨量为b[i]
假设第i座山的雨量为b[i]
由
题
意
可
得
由题意可得
由题意可得
a
[
1
]
=
b
[
n
]
+
b
[
1
]
2
a[1]=\\fracb[n]+b[1]2
a[1]=2b[n]+b[1]
即
即
即
2
∗
a
[
1
]
=
b
[
n
]
+
b
[
1
]
2*a[1]=b[n]+b[1]
2∗a[1]=b[n]+b[1]
2
∗
a
[
2
]
=
b
[
1
]
+
b
[
2
]
2*a[2]=b[1]+b[2]
2∗a[2]=b[1]+b[2]
2
∗
a
[
3
]
=
b
[
2
]
+
b
[
3
]
2*a[3]=b[2]+b[3]
2∗a[3]=b[2]+b[3]
.
.
.
.
.
.
.
.......
.......
2
∗
a
[
n
]
=
b
[
n
−
1
]
+
b
[
n
]
2*a[n]=b[n-1]+b[n]
2∗a[n]=b[n−1]+b[n]
上
式
累
加
可
得
上式累加可得
上式累加可得
2
∗
∑
i
=
1
n
a
[
i
]
=
2
∗
∑
i
=
1
n
b
[
i
]
2*\\sum_i=1^n a[i]=2*\\sum_i=1^n b[i]
2∗∑i=1na[i]=2∗∑i=1nb[i]
即 ∑ i = 1 n a [ i ] = ∑ i = 1 n b [ i ] 即\\sum_i=1^n a[i]=\\sum_i=1^n b[i] 即∑i=1na[i]=∑i=1BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解