比赛链接:codeforces round 943 (div.3)
悲惨的表现分,rating 居然还加了,只能说我就是个废柴蒟蒻
A,B 简直不怎么动脑,但当我看到题解后才发现自己真的思维不如大佬
C ┭┮﹏┭┮ 构造构不出来呀!!
A. Maximize?
标签:暴力枚举+数学+数论
问题:给一个整数 x ,找出任意一个整数 y ,使得 gcd( x , y ) + y 最大。(1
y
x)
比赛期间的代码:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
void solve()
{
int x;
cin >> x;
int tmp = 0, ans = 0;
for (int i = 1; i < x; i++)
{
int cnt = gcd(x, i) + i;
if (cnt > ans)
{
ans = cnt;
tmp = i;
}
}
cout << tmp << '\n';
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
大佬给的题解:
提示:
1.找出 gcd ( x , y ) + y 的上界 (核心思想)
2. gcd ( x , y ) + y = gcd ( x - y , y ) + y
3. gcd ( x , y ) + y
x
gcd ( x , y ) + y = x,是否有 y 呢?
解决思路:
其实要求 y 最大,即是指 gcd ( x , y ) = 1 ,所以 y (max) = x - 1
#include<iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int x;
cin>>x;
cout<<x-1<<"\n";
}
}
B. Prefiquence
标签:贪心+双指针
问题:两个二进制字符串 a 和 b ,确定最大可能的数字 k ,使得长度为 k 的字符串 a 的前缀是字符串 b 的子序列。字符串 a 的长度为 n ,字符串 b 的长度为 m。
(
)
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n, m;
cin >> n >> m;
string a, b;
cin >> a >> b;
int ans = 0;
for (int i = 0, j = 0; i < m; i++)
{ // i 对应 b ,j 对应 a
if (a[j] == b[i])
{
ans++;
j++;
}
// cout<<ans<<" ";
}
// cout<<'\n';
cout << ans << '\n';
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
C. Assembly via Remainders
标签:构造+数论
问题:给一个数组
,找出任意一个数组
,其中:
1.
代表所有的
2.
代表所有的
大佬给的题解:
提示:
为
解决思路:取
,因为 1000 比
中的任何一个都要大,那么可以把
当做
,这样
将会被保留
a 的最大值最多为
,小于
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n;
cin >> n;
int s = 1000;
cout << s << " ";
for (int i = 2; i <= n; i++)
{
int x;
cin >> x;
s += x;
cout << s << " ";
}
cout << '\n';
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}