AtCoder_abc332
A - Online Shopping
题目大意
这里有\(N\)件商品,第\(i\)件商品价格为\(P_i\),你要购买\(Q_i\)件,除了购买的费用外,他还要支付运费。
如果购买的总价大于\(S\),运费为0元,否则他需要支付\(K\)元的运费。
他一共要花多少钱呢?
解题思路
无
代码
// Problem: A - Online Shopping
// Contest: AtCoder - AtCoder Beginner Contest 332
// URL: https://atcoder.jp/contests/abc332/tasks/abc332_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int n,s,k,sum;
int main(){
cin>>n>>s>>k;
for(int i=1;i<=n;i++){
int p,q;cin>>p>>q;
sum+=p*q;
}
if(sum<s)
sum+=k;
cout<<sum;
return 0;
}
B - Glass and Mug
题目大意
高桥有一个容量为\(G\)的玻璃杯和一个容量为\(M\)的马克杯\((G<M)\)。
一开始两个杯子都是空的。
他将执行以下操作\(K\)次:
-
当玻璃杯装满水时,将玻璃杯中的所有水倒掉。
-
否则,如果马克杯是空的,就往马克杯里倒满水。
-
否则,将马克杯里的水倒进玻璃杯中,直到马克杯变空或玻璃杯装满水。
请输出马克杯和玻璃杯最后还剩多少水。
解题思路
模拟就完了
代码
// Problem: B - Glass and Mug
// Contest: AtCoder - AtCoder Beginner Contest 332
// URL: https://atcoder.jp/contests/abc332/tasks/abc332_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int k,g,m;
int main(){
cin>>k>>g>>m;
int ng=0,nm=0;
for(int i=1;i<=k;i++){
if(ng==g)
ng=0;
else if(nm==0)
nm=m;
else{
ng+=nm;
nm=max(0,ng-g);
ng-=nm;
}
}
cout<<ng<<" "<<nm;
return 0;
}
C - T-shirts
题目大意
你将得到长度为\(N\)的字符串\(S\),由\(0\)、\(1\)和\(2\)组成,代表高桥\(N\)天的时间表。
对于整数\(i(1 \le i \le N)\):
-
如果\(S\)的第\(i\)个字符是\(0\),则他没有为第\(i\)天安排的计划;
-
如果\(S\)的第\(i\)个字符是\(1\),他计划在第\(i\)天出去吃饭;
-
如果\(S\)的第\(i\)个字符是\(2\),则他计划在第\(i\)天参加比赛。
高桥有\(M\)件普通的T恤,在第一天之前就已经洗好了,可以穿了。
此外,为了能够满足以下条件,他将购买几件带有AtCoder logo 的T恤(以下简称logo衫):
-
在他出去吃饭的日子里,他会穿一件普通T恤或logo衫。
-
在他参加比赛的日子里,他会穿一件logo衫。
-
在没有计划的日子里,他不会穿任何T恤。此外,他还将清洗当时穿的所有T恤衫。从第二天起,他可以再穿一次。
-
一旦他穿上T恤,他就不能再穿了,除非他洗了。
确定他需要购买的logo衫的最低数量,以便能够在\(N\)天内的所有预定日期穿着合适的T恤衫。如果他不需要买新T恤,请打印0。
假设购买的logo衫也在第一天之前清洗好并准备好使用。
解题思路
这是一道模拟+贪心,我们可以根据给出的字符串按照如下策略安排T恤:
-
如果\(S_i\)为\(0\),将记录穿过的普通T恤和logo衫的计数器都清零。
-
如果\(S_i\)为1,判断是否还有能穿的普通T恤。
-
如果有,就穿一件普通T恤。
-
否则判断是否还有logo衫。
-
如果有,就穿一件logo衫。
-
否则就再购买一件logo衫,然后穿上。
-
-
-
如果\(S_i\)为2,判断是否还有能穿的logo衫。
- 如果有,就穿一件logo衫。
- 否则就再购买一件logo衫,然后穿上。
最后只要输出购买的数量就OK啦。
代码
// Problem: C - T-shirts
// Contest: AtCoder - AtCoder Beginner Contest 332
// URL: https://atcoder.jp/contests/abc332/tasks/abc332_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s;
int cntb,cntc,now;
//cntb:cnt buy表示穿过的logo衫的数量 cntc:cnt common表示穿过的普通T恤的数量 now:计划购买的数量
int main(){
cin>>n>>m>>s;
s=" "+s;//将下标调整为1~N,个人习惯
for(int i=1;i<=n;i++){//如解题思路部分所述
if(s[i]=='0')
cntc=0,cntb=0;
else if(s[i]=='1'){
if(cntc<m)
cntc++;
else if(cntb<now)
cntb++;
else
now++,cntb++;
}else{
if(cntb<now)
cntb++;
else
now++,cntb++;
}
}
cout<<now;//输出
return 0;//华丽结束
}
D - 做不出来
寄
标签:AtCoder,int,abc332,Limit,logo,T恤 From: https://www.cnblogs.com/lmq742643/p/17893617.html