1.外卖店优先级(New Online Judge)
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int order[N]; //order[id] 第id号店上一次的订单
int prior[N]; //prior[id] 第id号店的优先级
int flag[N]; //flag[id] 第id号店在不在优先缓存中
struct node {
int time,id;
} a[N];
bool cmp(node a, node b) {
if(a.id==b.id)
return a.time<b.time;
return a.id<b.id;
}
int main() {
int m,n,T;
cin>>n>>m>>T;
for(int i=0; i<m; i++)
cin>>a[i].time>>a[i].id;
sort(a,a+m,cmp); //按时间排序
for(int i=0; i<m; i++) {
int tt=a[i].time, id=a[i].id;
if(tt != order[id]) //如果当前订单不等于上一次的订单,则减去它们之间的间隔
prior[id] -= tt-order[id]-1;
prior[id] = prior[id] < 0 ? 0: prior[id]; //不小于0
if(prior[id]<=3) flag[id]=0;
prior[id]+=2;
if(prior[id]> 5) flag[id]=1;
order[id]=tt;
}
for(int i=1; i<=n; i++) //最后处理第T时刻
if(order[i]<T) {
prior[i] -= T-order[i];
if(prior[i]<=3)
flag[i]=0;
}
int ans=0;
for(int i=0; i<=n; i++)
if(flag[i])
ans++;
cout<<ans;
return 0;
}
2.付账问题(New Online Judge)
#include <bits/stdc++.h>
using namespace std;
const int M=5e5;
long long a[M];
int main() {
int n;
long long s;
scanf("%d %ld",&n,&s);
for(int i=1; i<=n; i++) scanf("%ld",&a[i]);
sort(a+1,a+n+1); //排序,从小到大
double avg=1.0*s/n; //平均值
double sum=0.0;
for(int i=1; i<=n; i++) {
if(a[i]*(n+1-i)<s) { //需要把钱全拿出的人:(1)钱不够平均数的,(2)钱够平均
sum+=(a[i]-avg)*(a[i]-avg);
s-=a[i]; //更新剩余钱数
} else { //不用把钱全拿出的人:非常有钱,不管怎么平均都够
double cur_avg=1.0*s/(n+1-i); //更新平均出钱数
sum += (cur_avg-avg)*(cur_avg-avg)*(n+1-i);
break;
}
}
printf("%.4f",sqrt(sum/n));
return 0;
}