http://codeforces.com/problemset/problem/625/A
题意:换饮料瓶,买最多饮料的问题,思想就是分类讨论然后,处理一下就ok了,注意减法的思想以及提前减去的思想!!!!
其实就相当于你是在最后的时候先拿了返回的c元,然后再去买,所以刚开始的时候要把它减掉(你为什么可以用这个价钱去买到,相当于你提前把返的钱给要回来了)注意分类讨论
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int a,b,c,n,ans;
cin>>n>>a>>b>>c;
if(a == b-c || a < b-c)
cout<<n/a;
else{
if(n>=b)
ans=(n-c)/(b-c);
ans+=(n-ans*(b-c))/a;
cout<<ans;
}
}
http://codeforces.com/problemset/problem/625/B
太水了,破题,找非重叠子串个数就ok了!!下回直接用高级语言.count就ok了!!!
#include<bits/stdc++.h>
using namespace std;
int const MAX_N = 100100;
char st_1[200100],st_2[200100];
int main() {
gets(st_1);
gets(st_2);
int len_1 = (int) strlen(st_1);
int len_2 = (int) strlen(st_2);
int ans = 0;
for (int i=0; i+len_2-1 < len_1; i++) {
int bg = 1;
for (int j=0; j<len_2; j++)
if (st_1[i+j] != st_2[j])
bg = 0;
if (bg) {
ans++;
//st_1[i + len_2 - 1] = '#';
i = i + len_2 - 1 ;
}
}
cout<<ans;
return 0;
}
http://codeforces.com/problemset/problem/625/C
构造,使得第k列的数尽可能的大,特别水!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e2+10;
int n,k;int a[maxn][maxn];
int main(){
cin>>n>>k;int num=n*n;int sum=0;
for(int i=1;i<=n;i++){
for(int j=n;j>=k;j--){
a[i][j]=num--;
}
sum+=a[i][k];
}
for(int i=1;i<=n;i++){
for(int j=k-1;j>=1;j--){
a[i][j]=num--;
}
}
printf("%d\n",sum);
for(int i=1;i<=n;i++){
for(int j=1;j<n;j++){
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][n]);
}
}