ATcoder ABC 358 补题记录(A~D,G)
1.ATcoder ABC 357 补题记录(A~F)
2.ATcoder ABC 358 补题记录(A~D,G)
3.AtCoder Beginner Contest 359 补题记录(A~E,G,G 暂无代码)4.AtCoder Beginner Contest 361 补题记录(A~F)5.AtCoder Beginner Contest 362 补题记录(A~E,G)6.AtCoder Beginner Contest 363 补题记录(A~F)7.AtCoder Beginner Contest 364 补题记录(A~F)8.AtCoder Beginner Contest 365 补题记录(A~E,G)9.AtCoder Beginner Contest 366 补题记录(A~G)10.AtCoder Beginner Contest 367 补题记录(A~F)11.AtCoder Beginner Contest 368 补题记录(A~D,F,G)12.AtCoder Beginner Contest 369 补题记录(A~G)13.AtCoder Beginner Contest 370 补题记录(A~F)A
直接模拟即可。
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
int a[N];
signed main(){
string s,t;
cin>>s>>t;
if(s=="AtCoder"&&t=="Land")cout<<"Yes\n";
else cout<<"No\n";
}
B
直接模拟即可。
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
int a[N];
signed main(){
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++)cin>>a[i];
int now=-1e18;
for(int i=1;i<=n;i++){
int xu=now;
if(xu<=a[i])now=a[i]+t;
else now=xu+t;
cout<<now<<'\n';
}
}
C
发现
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
char s[3010][3010];
signed main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)scanf("%s",s[i]);
int cost=233;
for(int i=1;i<(1ll<<n);i++){
set<int>se;
for(int j=0;j<n;j++)if(i>>j&1)
for(int k=0;k<m;k++)if(s[j][k]=='o')
se.insert(k);
if(se.size()==m)cost=min(cost,(int)__builtin_popcountll(i));
}
cout<<cost<<'\n';
}
D
对于每一个人 multiset
找到让她可以满足的,价值最小的礼物分配给她。时间复杂度为
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
int a[N],b[N];
signed main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i];
multiset<int>se;
int res=0;
for(int i=1;i<=n;i++)se.insert(a[i]);
sort(a+1,a+n+1,greater<>());
for(int i=1;i<=m;i++){
auto it=se.lower_bound(b[i]);
// cout<<"dbg "<<i<<' '<<b[i]<<'\n';
if(it==se.end()){
res=-1;
break;
}
res+=*it;
se.erase(it);
}
cout<<res<<'\n';
}
G
实际上 CF57E 也有一个(有点)类似的结论。
容易发现
此时若
时间复杂度为
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
int a[55][55],f[55*55][55][55];
//设f[i][j][k]表示现在是第i个操作, 当前位于(j,k)
signed main(){
int n,m,k;
cin>>n>>m>>k;
int si,sj;
cin>>si>>sj;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
memset(f,-0x3f,sizeof f);
f[0][si][sj]=0;
for(int i=1;i<=min(n*m,k);i++){
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++)
f[i][j][k]=f[i-1][j][k]+a[j][k];
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++){
const int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
for(int d=0;d<4;d++){
int x=j+dx[d],y=k+dy[d];
if(x>=1&&x<=n&&y>=1&&y<=m)
f[i][x][y]=max(f[i][x][y],f[i-1][j][k]+a[x][y]);
}
}
}
if(k<=n*m){
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
res=max(res,f[k][i][j]);
cout<<res<<'\n';
}else{
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
int now=f[n*m][i][j]+(k-n*m)*a[i][j];
res=max(res,now);
}
cout<<res<<'\n';
}
}
本文来自博客园,作者:yhbqwq,转载请注明原文链接:https://www.cnblogs.com/yhbqwq/p/18249845,谢谢QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧