$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$ 矩形覆盖

题目传送门

01-03 05:14