Codeforces Round #621 (Div. 1 + Div. 2)
A. Cow and Haybales
贪心,移到第一堆的代价即为与第一堆的距离。
#include <bits/stdc++.h> using namespace std; void solve(){ int n,d;cin>>n>>d; int sum;cin>>sum; for(int i=1;i<n;i++){ int t;cin>>t; if(d>0){ sum+=min(t,d/i); d-=t*i; } } cout<<sum<<"\n"; } int main() { int t;cin>>t; while(t--) solve(); return 0; }
B. Cow and Friend
贪心,考虑能跳的最远距离mx,2*mx内最多跳两次,再加上移动到2*mx内最少需要多少次。
#include <bits/stdc++.h> using namespace std; void solve(){ int n,x;cin>>n>>x; int a[n];for(int &i:a) cin>>i; int mx=*max_element(a,a+n); int dis=x,cnt=0; if(dis>2*mx) cnt+=(dis-2*mx-1)/mx+1; dis-=cnt*mx; if(find(a,a+n,dis)!=a+n) cout<<cnt+1<<"\n"; else cout<<cnt+2<<"\n"; } int main() { int t;cin>>t; while(t--) solve(); return 0; }
C. Cow and Message
长为3的组合不会多于1或2的,更长同理,所以只需考虑长为1和2的最多组合。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { string s;cin>>s; ll arr1[26]={0},arr2[26][26]={0}; for(char c:s){ int i=c-‘a‘; for(int j=0;j<26;j++) arr2[j][i]+=arr1[j]; ++arr1[i]; } cout<<max(*max_element(arr1,arr1+26),*max_element(*arr2,*arr2+26*26))<<"\n"; return 0; }
D. Cow and Fields
还是不太明白为什么要前后缀距离作差排序,待填。
原文地址:https://www.cnblogs.com/Kanoon/p/12571204.html
时间: 2024-11-08 11:25:53