A - Online Shopping (atcoder.jp)
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
int n,s,k;
void solve() {
cin>>n>>s>>k;
int ans=0;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
ans+=x*y;
}
if(ans<s) ans+=k;
cout<<ans<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
B - Glass and Mug (atcoder.jp)
数据量很小,直接暴力模拟
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
int k,g,m;
void solve() {
cin>>k>>g>>m;
int x=0,y=0;
while(k--){
if(x==g) x=0;
else if(y==0) y=m;
else{
int res=g-x;
if(y>=res) x=g,y-=res;
else x+=y,y=0;
}
}
cout<<x<<' '<<y<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
看题目的问法,很明显是二分答案
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
int n,m;
string s;
bool check(int x){
int b=x;//logo的总数,包括worn
int bb=x;//logo的总数,不包括worn
int sum=m+x;//plain和loge的总数,包括worn
int summ=sum;//plain和logo的总数,不包括worn
for(int i=0;i<n;i++){
if(s[i]=='0') bb=b,summ=sum;
else if(s[i]=='1') {
summ--;
if(summ<0) return false;
}
else if(s[i]=='2'){
bb--;
summ--;
if(bb<0||summ<0) return false;
}
}
return true;
}
void solve() {
cin>>n>>m;
cin>>s;
int l=0,r=1000;
while(l<r){
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}