A. Cow and Haybales
从最左边的移到第一个才能实现最大化
即从左到右判断
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int a[105];
int t;
int main(){
cin>>t;
while(t--){
int n,d;cin>>n>>d;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int sum=a[1];
for(int i=2;i<=n;i++){
if(a[i]*(i-1)<=d){
sum+=a[i];
d-=a[i]*(i-1);
}
else{
sum+=(d/(i-1));
break;
}
}
cout<<sum<<endl;
}
return 0;
}
B. Cow and Friend
如果有和x相等的距离,输出1
否则记录最大的数字maxs,输出max(2,(d-1)/maxs)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int a[100005];
int main(){
int t;cin>>t;
while(t--){
int n,x;cin>>n>>x;
int maxs=-1;
int flag=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==x)flag=1;
maxs=max(maxs,a[i]);
}
if(flag==0)cout<<max(2,(x+maxs-1)/maxs)<<endl;
else cout<<1<<endl;
}
return 0;
}
C. Cow and Message
字符只可取1位或2位
若可取3位,则若取3位中的其中2位,必不小于3位的数量
从结尾到开头进行枚举
注意数据范围long long
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
ll a[30];
ll b[30][30];
int main(){
string s;cin>>s;
ll maxs=-1;
for(int i=0;i<s.length();i++){
a[s[i]-'a']++;
maxs=max(maxs,a[s[i]-'a']);
}
for(int i=s.length()-1;i>=1;i--){
int c=s[i]-'a';
a[c]--;
for(int j=0;j<26;j++){
b[j][c]+=a[j];
maxs=max(maxs,b[j][c]);
}
}
cout<<maxs;
return 0;
}