Codeforces Round #752 (Div. 2)(A-E)
Posted H-w-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #752 (Div. 2)(A-E)相关的知识,希望对你有一定的参考价值。
Codeforces Round #752 (Div. 2)
A. Era
题意:
给出一个数组 a a a,一种操作:每次能够在任意位置插入一个数,问最小的插入次数使 ∀ i ∈ [ 1 , n ] \\forall i \\in[1,n] ∀i∈[1,n],都满足 a i ≤ i a_i\\le i ai≤i
思路:
我们能够在最前面插入1,使每个数的下标都加1,如果 i ≤ a [ i ] i\\le a[i] i≤a[i],只要让最小 i − a [ i ] i-a[i] i−a[i]变成0的操作数就是答案。
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-2;
int a[200010];
int main()
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int t;
cin >> t;
while(t--)
int n;
cin >> n;
int ans = 0;
for(int i=1; i<=n; i++)
cin >> a[i];
ans = max(a[i] - i, ans);
cout << ans << endl;
B. XOR Specia-LIS-t
题意:
给出一个数组,你可以将它切割成多个子数组,问每个子数组的最长上升子序列的长度 的 异或是否能够为0
思路:
当数组长度是一个偶数,我们把数组都分解成长度为1的子数组,异或得0。
当数组长度是一个奇数,只要存在一个长度为2的非递增子数组,再把其他的都分解成长度为1的子数组,异或得0。
否则就不存在异或得0得情况。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5+10;
const double eps = 1e-2;
ll s[N];
ll fac[N];
bool check(int n)
for(int i=1; i<=n; i++)
if(i >= 30) return true;
if(s[i] % fac[i+1] == 0) return false;
return true;
int main()
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
fac[1] = 1;
for(ll i=2; i<=30; i++)
ll tmp = __gcd(fac[i-1], i);
fac[i] = fac[i-1] / tmp * i;
int t;
cin >> t;
while(t--)
int n;
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%lld", &s[i]);
if(check(n)) puts("YES");
else puts("NO");
C. Di-visible Confusion
题意:
给出一个数组a,当 a [ i ] % ( i + 1 ) ≠ 0 a[i] \\% (i+1)\\neq 0 a[i]%(i+1)=0,就能把 a [ i ] a[i] a[i]删除,后面的元素向前移。问是否存在一个方案使得所有的数都能删除。
思路:
每删除一个元素,都能使得它后面的元素下标产生变化,但是当
i
=
1
i=1
i=1时不能再往右移,如果
a
[
i
]
%
2
=
0
a[i] \\% 2 = 0
a[i]%2=0那么
a
[
i
]
a[i]
a[i]一定不能被删除。
所以我们往后推可以发现,如果
∃
i
\\exist i
∃i使得
a
[
i
]
%
l
c
m
(
2
,
3
,
.
.
.
i
+
1
)
=
0
a[i] \\% lcm(2,3,...i+1) = 0
a[i]%lcm(2,3,...i+1)=0那么当前元素一定不能被删除。
【当
i
≥
30
i\\ge30
i≥30时
l
c
m
lcm
lcm会大于
1
e
9
1e9
1e9,所以就不用再考虑了】
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5+10;
const double eps = 1e-2;
ll s[N];
ll fac[N];
bool check(int n)
for(int i=1; i<=n; i++)
if(i >= 30) return true;
if(s[i] % fac[i+1] == 0) return false;
return true;
int main()
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
fac[1] = 1;
for(ll i=2; i<=30; i++)
ll tmp = __gcd(fac[i-1], i);
fac[i] = fac[i-1] / tmp * i;
int t;
cin >> t;
while(t--)
int n;
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%lld", &s[i]);
if(check(n)) puts("YES");
else puts("NO");
D. Moderate Modular Mode
题意:
给出两个偶数 x , y x,y x,y,求 n n n,使得满足条件 n m o d x = y m o d n n\\mod x= y\\mod n nmodx=ymodn。
思路:
当
x
=
y
x=y
x=y时,
n
=
x
n=x
n=x
当
x
>
y
x>y
x>y时,
n
=
x
+
y
n=x+y
n=x+y
当
x
<
y
x<y
x<y时,设
n
=
k
1
x
+
m
1
y
=
k
2
n
+
m
2
(
k
2
+
1
)
n
=
k
1
x
+
y
x
%
2
=
y
%
2
=
0
n
=
(
k
1
x
+
y
)
/
2
当
k
1
=
y
/
x
时
满
足
条
件
n=k_1x+m_1\\\\ y=k_2n+m_2\\\\ (k_2+1)n=k_1x+y\\\\ x\\%2=y\\%2=0\\\\ n=(k_1x+y)/2\\\\ 当k_1=y/x时满足条件
n=k1x+m1y=k2n+m2(k2+1)n=k1x+yx%2=y%2=0n=(k1x+y)/2当k1=y/x时满足条件
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5+10;
const double eps = 1e-2;
ll s[N];
ll fac[N];
bool check(int n)
for(int i=1; i<=n; i++)
if(i >= 30) return true;
if(s[i] % fac[i+1] == 0) return false;
return true;
int main()
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int t;
cin >> t;
while(t--)
ll x, y;
cin >> x >> y;
if(x == y)
cout << x << endl;
else if(x > y)
cout << x + y << endl;
else
if(y % x == 0) cout << x << endl;
else cout << ((y/x)*x + y)/2 << endl;
E. Extreme Extension
题意:
给出一个数组a
一个操作:将
a
i
a_i
ai分解成
x
x
x和
y
y
Codeforces Round #752 (Div. 2)(A-E)
Codeforces Round #752 (Div. 2)(A-E)
Codeforces Round #389 (Div. 2) 752F(树的权值重心)