A - Guest From the Past
题解:暴力循环会超时。买玻璃瓶有返还,而塑料瓶没有,应当优先考虑玻璃瓶。玻璃瓶的实际价格为b-c,但当前价格要≥b才能买。设买了n瓶,先减去最后一瓶的钱(不包括返还),然后前面的瓶一定能买下并且价格为b-c。然后剩余的钱买塑料瓶即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll s,a,b,c,sum=0;cin>>s>>a>>b>>c;
if(s>=b&&a>b-c)
{
sum=(s-b)/(b-c)+1;
s-=sum*(b-c);
}
sum+=s/a;
cout<<sum<<endl;
}
B - War of the Corporations
题意:最少将几个字符变成‘#’使得输入中下面的字符串不是上面字符串的子字符串。
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
char a[100010],b[35];
int main()
{
cin>>a>>b;
int i=0,j=0,la=strlen(a),lb=strlen(b),cnt=0;
while(i<la)
{
if(a[i]==b[0])
{
j++;
while(j<lb)
{
if(a[i+j]!=b[j])break;
j++;
}
if(j==lb)i+=j-1,cnt++;//如果有相同的子字符串,i加上字符串的长度,否则只加1
j=0;
}
i++;
}
cout<<cnt<<endl;
}