$Luogu\ P1031$ 均分纸牌
先算出平均值,然后处理出每堆纸牌与平均值的关系,多了则为$+$,少了为$-$。然后每次把当前这一堆的牌改变,加到下一堆牌里,这样一定是最优的
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[102]; 4 int main(){ 5 int n,i,ave=0,step=0; 6 cin>>n; 7 for(i=1;i<=n;i++) 8 { 9 cin>>a[i];ave+=a[i]; 10 } 11 ave/=n; 12 for(i=1;i<=n;i++) a[i]-=ave; 13 i=1; 14 int j=n; 15 while(a[i]==0&&i<n) i++; 16 while(a[j]==0&&j>1) j--; 17 while(i<j) 18 { 19 a[i+1]+=a[i]; 20 a[i]=0; 21 step++;i++; 22 while(a[i]==0&&i<j) i++; 23 } 24 cout<<step<<endl; 25 return 0; 26 }
$Luogu\ P1032$ 字串变换
$Luogu\ P1033$ 自由落体
算出小车能接到的小球的位置范围,直接统计个数即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 float H,S,V,L,K,n; 4 int ans=0; 5 int main(){ 6 scanf("%f%f%f%f%f%f",&H,&S,&V,&L,&K,&n); 7 float t1,t2,l,r; 8 t1=sqrt((H-K)/5); 9 t2=sqrt(H/5); 10 l=S-V*t2-0.0001; 11 r=S+L-V*t1+0.0001; 12 for(int i=max(0,int(ceil(l)));i<=min(n-1,r);i++) 13 ans++; 14 printf("%d",ans); 15 return 0; 16 }
$Luogu\ P1034$ 矩形覆盖