A.
求一个元素乘积为 2023 的数组 a,其中的 k 个元素被移除后得到数组 b。现在告诉你 b,问是否能找到一个满足以上条件的数组 a。
思路:直接看是否能整除即可。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e9;
int a[10];
void solve()
{
int n,k;
cin>>n>>k;
int sum=1;
for (int i=1;i<=n;i++){
cin>>a[i];
sum*=a[i];
}
if(2023%sum!=0){
cout<<"NO"<<endl;
}
else {
cout<<"YES"<<endl;
cout<<2023/sum<<" ";
for (int i=1;i<=k-1;i++){
cout<<1<<" ";
}
cout<<endl;
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
}
B.

思路:当b整除a时,b=a*p。p为x的最小质因数。 x=b*p =b*b/a.
当b不能整除a时,x=lcm(ab)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e9;
int lcm(int a,int b)
{
return a*b/__gcd(a,b);
}
void solve()
{
int a,b;
cin>>a>>b;
if(b%a==0){
cout<<b*b/a<<endl;
}
else {
cout<<lcm(a,b)<<endl;
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
}
C
思路:博弈论。当一奇一偶合并时,总和会减一,根据最优解,第一人要让奇数尽可能的小。
而第二人则选择奇数和偶数合并。所以每一回合减少3个奇数。
如果奇数mod 3为1 总和为sum-cnt/3-1. 如果奇数数mod3为 2或0 和为sum-cnt/3.
.D

思路:构造题。通过169,961,196,三个数来构造。可向196后面加100的倍数,向169,961中间加0.
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e9;
void solve()
{
int n;
cin>>n;
if(n==1) {
cout<<1<<endl;
return ;
}
cout<<196<<string(n-3,'0')<<'\n';
for (int i=0;i<n/2;i++){
cout<<1<<string(i,'0')<<6<<string(i,'0')<<9<<string(n-3-2*i,'0')<<endl;
cout<<9<<string(i,'0')<<6<<string(i,'0')<<1<<string(n-3-2*i,'0')<<'\n';
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
}
文章讲述了如何根据给定数组b推断原数组a,当b整除a时,计算b的平方除以a;否则,计算a和b的最小公倍数。涉及到了整除、质因数分解和最小公倍数的计算方法。
2031

被折叠的 条评论
为什么被折叠?



