AtCoder Beginner Contest 153 题解
传送门:https://atcoder.jp/contests/abc153/tasks
A
向上取整
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b; cin>>a>>b;
cout<<(a+b-1)/b;
return 0;
}
B
判断全部法术用一次能不能干掉
#include<bits/stdc++.h>
using namespace std;
int main(){
int k, n; cin>>k>>n;
while(n--){
int t; cin>>t;
k-=t;
}
puts(k<=0? "Yes": "No");
return 0;
}
C
向耗费最高的 个怪物施即死咒。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int w[N];
signed main(){
int n, k; cin>>n>>k;
for(int i=0; i<n; i++) cin>>w[i];
sort(w, w+n);
int res=0;
for(int i=0; i<n-k; i++) res+=w[i];
cout<<res<<endl;
return 0;
}
D
递归+记忆化
#include<bits/stdc++.h>
using namespace std;
#define int long long
map<int, int> f;
int cal(int v){
if(f[v]) return f[v];
return f[v]=1+cal(v/2)+cal(v/2);
}
signed main(){
f[1]=1;
int h; cin>>h;
cout<<cal(h)<<endl;
return 0;
}
E
表示斩杀血量为 的怪物最少花费,转化为完全背包问题。
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define debug(x) cerr << #x << ": " << x << endl
#define pb(a) push_back(a)
#define set0(a) memset(a,0,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define ceil(a,b) (a+(b-1))/b
#define INF 0x3f3f3f3f
#define ll_INF 0x7f7f7f7f7f7f7f7f
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
inline void read(int &x) {
int s=0;x=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
x*=s;
}
const int N=1005, M=10005;
int h, n;
int w[N], v[N];
int f[M];
int main(){
read(h), read(n);
rep(i,1,n) read(v[i]), read(w[i]);
memset(f, 0x3f, sizeof f);
f[0]=0;
rep(i,1,n) rep(j,0,h) f[j]=min(f[max(0, j-v[i])]+w[i], f[j]);
cout<<f[h]<<endl;
return 0;
}
F
将怪物按照坐标排序,策略是:从左到右枚举怪物并且依次击杀。
需要维护的信息是其他怪物受到的溅射伤害,需要查询的信息是当前怪物的血量,于是我们可以建一棵线段树维护。
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define debug(x) cerr << #x << ": " << x << endl
#define pb(a) push_back(a)
#define set0(a) memset(a,0,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define ceil(a,b) (a+(b-1))/b
#define INF 0x3f3f3f3f
#define ll_INF 0x7f7f7f7f7f7f7f7f
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
#define int long long
inline void read(int &x) {
int s=0;x=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
x*=s;
}
const int N=2e5+5;
int n, d, a;
struct node{
int p, h;
bool operator < (const node &o)const{
return p<o.p;
}
}e[N];
int w[N], pos[N];
struct Tree{
int l, r;
int sum, sub;
}tr[N<<2];
int ls(int u){return u<<1;}
int rs(int u){return u<<1|1;}
void pushup(int u){
tr[u].sum=tr[ls(u)].sum+tr[rs(u)].sum;
}
void build(int u, int l, int r){
tr[u]={l, r};
if(l>=r){
tr[u].sum=w[l];
return;
}
int mid=l+r>>1;
build(ls(u), l, mid), build(rs(u), mid+1, r);
pushup(u);
}
void pushdown(int u){
auto &L=tr[ls(u)], &R=tr[rs(u)];
L.sum-=tr[u].sub*(L.r-L.l+1), L.sub+=tr[u].sub;
R.sum-=tr[u].sub*(R.r-R.l+1), R.sub+=tr[u].sub;
tr[u].sub=0;
}
void modify(int u, int l, int r, int k){
if(l<=tr[u].l && tr[u].r<=r){
tr[u].sum-=(tr[u].r-tr[u].l+1)*k;
tr[u].sub+=k;
return;
}
pushdown(u);
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid) modify(ls(u), l, r, k);
if(mid<r) modify(rs(u), l, r, k);
pushup(u);
}
int query(int u, int p){
if(tr[u].l==tr[u].r && tr[u].l==p) return tr[u].sum;
int mid=tr[u].l+tr[u].r>>1;
int res=0;
pushdown(u);
if(p<=mid) res=query(ls(u), p);
else res=query(rs(u), p);
return res;
}
signed main(){
read(n), read(d), read(a);
rep(i,1,n) read(e[i].p), read(e[i].h), e[i].h=ceil(e[i].h, a);
int len=d<<1;
sort(e+1, e+1+n);
rep(i,1,n) w[i]=e[i].h, pos[i]=e[i].p/*, debug(pos[i])*/;
build(1, 1, n);
int res=0;
rep(i,1,n){
// debug(query(1, i));
if(query(1, i)<=0) continue;
int L=i, R=upper_bound(pos+L, pos+n+1, pos[L]+len)-pos-1;
// debug(R);
// debug(query(1, L));
res+=query(1, L), modify(1, L, R, query(1, L));
}
// rep(i,1,n) debug(query(1, i));
cout<<res<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】