3 solutions
-
1
本题重点难在判断的地方
除了0~23外,还有跨天的时间
#include<iostream> using namespace std; int main() { int n,ans=0,ma; cin>>n;//输入 int w[n],x[n]; for(int i=0;i<n;i++) { cin>>w[i]>>x[i];//输入 x[i]+=9;//改为上班时间 } for(int t=0;t<24;t++)//遍历每个时间点 { ans=0;//重置 for(int i=0;i<n;i++) { if((x[i]+t)%24>=0 && (x[i]+t)%24<=8)//搞了好久的判断 { ans+=w[i];//加上人数 } } ma=max(ma,ans);//是不是最多人的 } cout<<ma;//输出最多人的人数 return 0;//完结散花 }
-
1
题意
子公司的时间若是在上班时间,那这里的员工就可以开会。输出最多有多少员工能同时开会
思路
遍历 0-23 小时,子公司在上班时间就加员工,找 0-23 小时中能开会员工的最大的小时
代码
#include <bits/stdc++.h> using namespace std; struct cpn{ int p,t; // p 是该分公司的员工,t 是当地时间 }a[1005]; int mx,sum; int main(int argc, char **argv){ int n; cin >> n; for (int i = 0;i < n;i++){ cin >> a[i].p >> a[i].t; } for (int i = 0;i < 24;i++){ // UTC 时间遍历 sum = 0; for (int j = 0;j < n;j++){ // 遍历分公司 int dt = (a[j].t + i) % 24; // 当地时间 if (dt >= 9 && dt < 18){ // 在上班时间就加上 sum += a[j].p; } } mx = max(mx,sum); // 比较 } printf("%d",mx); return 0; }
-
-8
#include<bits/stdc++.h> using namespace std; struct fgs{ int w,x; }; int main(){ int n; cin>>n; fgs a[n]; for(int i=0;i<n;i++){ cin>>a[i].w>>a[i].x; } int wmax=0; for(int i=0;i<24;i++){ int sum=0; for(int j=0;j<n;j++){ int t1=(i+a[j].x)%24; int t2=t1+1; if(t1>8&&t2<19) sum+=a[j].w; } //cout<<"debugs:"<<sum<<"\n"; wmax=max(wmax,sum); } cout<<wmax; }
- 1
Information
- ID
- 929
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 32
- Accepted
- 10
- Uploaded By