博客主页:PH_modest的博客主页
当前专栏:CF比赛记录
其他专栏:
每日一题
cf闯关练习
C语言跬步积累
座右铭:广积粮,缓称王!
在一个乘积等于 2023 2023 2023 的序列 a a a 中,去掉了 k k k 个数字,剩下一个长度为 n n n 的序列 b b b 。给定所得到的序列 b b b ,找出任何合适的序列 a a a 并输出从中删除了哪些 k k k 元素,或者指出这样的序列不可能存在。
请注意,我们并不保证存在这样的序列。
2023的因子只有1、7、17、119、289 、2023,先求出给出元素之积,然后判断这个数是不是2023的因子,如果是就直接输出2023除以这个数的值,剩下的数直接输出1.
//https://codeforces.com/contest/1916/problem/A
//
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define int long long
using namespace std;
int s[200020];
void solve()
{
int n,k;
cin>>n>>k;
int cj=1;
int ans=2023;
for(int i=0;i<n;i++)
{
cin>>s[i];
cj*=s[i];
}
if(cj==1||cj==7||cj==17||cj==119||cj==289||cj==2023)
{
cout<<"YES"<<"\n";
if(cj==1)
{
cout<<"2023 ";
for(int i=0;i<k-1;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
if(cj==7)
{
cout<<"289 ";
for(int i=0;i<k-1;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
if(cj==17)
{
cout<<"119 ";
for(int i=0;i<k-1;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
if(cj==119)
{
cout<<"17 ";
for(int i=0;i<k-1;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
if(cj==289)
{
cout<<"7 ";
for(int i=0;i<k-1;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
if(cj==2023)
{
for(int i=0;i<k;i++)
{
cout<<"1 ";
}
cout<<"\n";
return;
}
}
else
{
cout<<"NO"<<"\n";
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
选择某个数字 1 ≤ x ≤ 1 0 9 1 \le x \le 10^9 1≤x≤109 。给你两个整数 a a a 和 b b b ,它们是数 x x x 的两个最大除数。同时满足条件1 ≤ a < b < x 。
对于给定的数 a a a , b b b , 你需要求出 x x x 的值。
† ^{\dagger} † 如果有整数 k k k 使得 x = y ⋅ k x = y \cdot k x=y⋅k 是整数 x x x 的整除,那么数 y y y 是整数 x x x 的整除。
求最小公倍数再考虑这个最小公倍数是否等于b,如果等于就用b/a*这个最小公倍数
//https://codeforces.com/contest/1916/problem/B
//求最小公倍数再考虑这个最小公倍数是否等于b,如果等于就用b/a*这个最小公倍数
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define int long long
using namespace std;
void solve()
{
int a,b;
cin>>a>>b;
int c=a/__gcd(a,b)*b;
if(c==b)
{
cout<<b/a*c<<"\n";
}
else
{
cout<<c<<"\n";
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
传送门
//https://codeforces.com/contest/1916/problem/C
//考虑奇数的个数,假设个数为x,有一个x/3,结果就需要-1,在判断x%3是否等于1,如果等于就还需要再减一
//
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define int long long
using namespace std;
int s[200020];
int odd[200020];//奇数的个数
void solve()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i];
}
if(s[0]%2==1)
{
odd[0]=1;
}
else
{
odd[0]=0;
}
for(int i=1;i<n;i++)//求前i个数有多少个奇数
{
if(s[i]%2==1)
{
odd[i]=odd[i-1]+1;
}
else
{
odd[i]=odd[i-1];
}
}
int sum=0;
for(int i=0;i<n;i++)
{
sum+=s[i];
if(i==0)
{
cout<<sum<<" ";
continue;
}
int x=odd[i]%3;
int y=odd[i]/3;
if(x==1)
{
cout<<sum-y-1<<" ";
}
else
{
cout<<sum-y<<" ";
}
}
cout<<"\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}