2024CSP-X 山东小学组复赛题目程序代码

题单地址:https://www.luogu.com.cn/training/643241#problems

购物(buy)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,w;
 4 int a[200010];
 5 int main() {
 6     cin>>n>>m>>w;
 7     for(int i=1; i<=n; i++) cin>>a[i];
 8     sort(a+1,a+1+n,greater<int>());
 9     long long ans=0,t=0,sum=0,num=0;
10     for(int i=1; i<=n; i++) {
11         ans+=a[i];
12         sum+=a[i];
13         t++;
14     //    cout<<ans<<' '<<sum<<' '<<t<<endl;
15         if(t==m) {
16             if(w<sum) ans=ans-sum+w;
17             sum=0;
18             t=0;
19         }
20     }
21     if(w<sum) ans=ans-sum+w;
22     cout<<ans<<endl;
23     return 0;
24 }

消灭怪兽 (monster) 45分暴力枚举

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k;
 4 int a[1000010];
 5 long long sum[1000010];
 6 int main() {
 7     cin>>n>>k;
 8     for(int i=1; i<=n; i++) {
 9         cin>>a[i];
10         sum[i]=sum[i-1]+a[i];
11     }
12     int cnt=0;
13     for(int i=1; i<=n; i++) {
14         for(int j=i; j<=n; j++) {
15             long long t=sum[j]-sum[i-1];
16             if(t%k==0) {
17                 cnt++;
18                 //cout<<i<<' '<<j<<' '<<t<<endl; 
19             }
20         }
21     }
22     cout<<cnt;
23     return 0;
24 }

消灭怪兽 (monster) 100分

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k;
 4 int a[1000010];
 5 long long sum[1000010];
 6 long long cnt[2*1000010];
 7 int main() {
 8     cin>>n>>k;
 9     long long ans=0;
10     for(int i=1; i<=n; i++) {
11         cin>>a[i];
12         sum[i]=sum[i-1]+a[i];
13         //if(a[i]%k==0) ans++;//区间中一个数,这个数是K的倍数
14         cnt[sum[i]%k]++;
15         //cout<<sum[i]<<" "<< sum[i]%k<<endl;
16     }
17     cnt[0]++;
18     for(int i=0; i<k; i++) {
19         if(cnt[i]>1) {
20             ans+=(1+cnt[i]-1)*(cnt[i]-1)/2;
21             //cout<<i<<' '<<cnt[i]<<' '<<(1+cnt[i]-1)*(cnt[i]-1)/2<<endl;
22         }
23     }
24     cout<<ans;

翻硬币 (coin)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 int a[2000010];
 5 int main() {
 6     cin>>n>>m;
 7     for(int i=1; i<=m; i++) {
 8         int x,y;
 9         cin>>x>>y;
10         a[x]+=1;
11         a[y+1]-=1;
12     }
13     int sum=0;
14     for(int i=1; i<=n; i++) {
15         sum+=a[i];
16         if(sum%2==0) cout<<0;
17         else cout<<1;
18     }
19     return 0;
20 }

刷题 (question)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long n,m,r;
 4 long long a[1000010];
 5 
 6 long long check(long long mid) {
 7     long long s=0,t=0,mmax=0;
 8     for(int i=1; i<=n; i++) {
 9         s=s+a[i];
10         if(a[i]>mmax) mmax=a[i];
11         //cout<<"before "<<i<<' '<<t<<' '<<s<<' '<<mmax<<endl;
12         if(s>mid+mmax) {
13             s=a[i];
14             t++;
15             mmax=a[i];
16         }
17         //cout<<"after "<<i<<' '<<t<<' '<<s<<' '<<mmax<<endl;
18     }
19     if(s!=0) t++;
20     //cout<<"** "<<mid<<' '<<t<<endl;
21     return t;
22 }
23 
24 
25 int work(long long l,long long r) {
26     while(l<r) {
27         long long mid=(l+r)/2;
28         long long t=check(mid); 
29         ///cout<<endl<<"&& "<<l<<' '<<r<<" "<<t<<endl;
30         if(t<=m) r=mid;
31         else l=mid+1;
32         
33     }
34     return l;
35 }
36 
37 int main() {
38     cin>>n>>m;
39     for(int i=1; i<=n; i++) {
40         cin>>a[i];
41         r+=a[i];
42     }
43     cout<<work(0,r+1);
44     //cout<<check(5370);
45     return 0;
46 }

 

posted @ 2024-11-06 21:05  关于42号星球  阅读(174)  评论(0编辑  收藏  举报