Codeforces Round 973 (Div. 2)
1.Codeforces Round 975 (Div. 2)
2.Codeforces Round 973 (Div. 2)
Codeforces 973 div2
A:Zhan's Blender
点击查看代码
void solve() {
int n,x,y;
cin>>n>>x>>y;
int ans=0;
if(x>=y) {
ans=n/y;
if(n%y) ans++;
}
else {
ans=n/x;
if(n%x) ans++;
}
cout<<ans<<endl;
}
B:Battle for Servive
点击查看代码
void solve() {
int n;cin>>n;
int a[n+1]={};
int sum=0;
for(int i=1;i<=n;i++) {
cin>>a[i];
if(i<=n-2) sum+=a[i];
}
cout<<a[n]-a[n-1]+sum<<endl;
}
C:Password Cracking
交互题
点击查看代码
const int maxn=2e6+5;
int h[maxn];
int ask(string s){
cout << "? " << s << endl;
cout.flush();
int x;
cin >> x;
return x;
}
void solve(){
int n;
cin >> n;
string s;
if ( ask("0") ) s = "0";
else s = "1";
while ( s.length() < n ){
if ( ask(s + '0') ){
s += '0';
}else if ( ask(s + '1') ){
s += '1';
}else{
break;
}
}
while ( s.length() < n ){
if ( ask('0' + s) ){
s = '0' + s;
}else{
s = '1' + s;
}
}
cout << "! " << s << endl;
cout.flush();
}
signed main(){
int T;
cin >> T;
while (T -- ) solve();
return 0;
}
D:Minimize the Difference
原理:本位只能变小,后继增大。如果数组为单调递增,那么a[n]-a[1]。如果单调递减,从前往后那么需要通过本位减,后继加取不同个step所选数组的平均值来维护最小值;从后往前需要通过本位加,前驱减取不同step所选数组的平均值来维护最大值。其中最大值,最小值结果为最优解的结果。补充:本题有向上取整的方法。
点击查看代码
const int N=2e5+10;
const i64 INF=0x3f3f3f3f3f3f3f;
i64 a[N];
void solve() {
i64 n;cin>>n;
i64 s=0,mi=INF,ma=-INF;
for(i64 i=1;i<=n;i++) {
cin>>a[i];
}
for(i64 i=1;i<=n;i++) {
s+=a[i];
mi=min(mi,s/i);
}//从头开始不断求前缀序列的平均值,可能达到可能达不到。取平均值维护最小值
s=0;
for(i64 i=n;i>=1;i--) {
s+=a[i];
ma=max(ma,(s+n-i)/(n-i+1));//向上取整,平均值维护最大值:向上取整的方式需要记住!
}
cout<<ma-mi<<endl;
}
E:Prefix GCD
原理:相当于我创建了一个新数组,ans[i]存储原来最优排序后的前i位的GCD。此时先把整个数组的最大公约数除去,简便运算,避免超时。再对于ans数组一位一位去存储最优解,最优解则需要遍历原array,使得前缀gcd取得最小值,以此来维护ans数组。补充:_gcd(,)为algorithm自带函数,不需要编写gcd了。
点击查看代码
const ll N=2e5+5;
const ll mod=1e9+7;
ll a[N];
ll vis[N];
void solve() {
ll n,cnt=0,p=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
vis[i]=0;
}
vis[1]=1;
ll id=1;
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
p=__gcd(p,a[i]);
}
ll ans=a[1],s=a[1],mi=a[1];
while(1)
{
s=mi;
ll t=0,cnt=0;
for(int i=2;i<=n;i++)
{
if(vis[i])
{
continue;
}
t=__gcd(s,a[i]);
if(t<=mi)
{
mi=t;
id=i;
cnt++;
}
}
if(cnt)
{
vis[id]=1;
ans+=mi;
}
else
{
break;
}
if(mi==p)
{
break;
}
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
ans+=p;
}
}
cout<<ans<<"\n";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】