区间选数
#include<cstdio>
#include<cstring>
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int n,k;
int t;
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
srand((unsigned int)(time(0)));
int l,r,nl,nr;cin>>l>>r>>nl>>nr;
int a=rand()%r+l,b=rand()%nr+nl;
while(1){
a=rand()%r+l;
b=rand()%nr+nl;
if(a!=b && b<=nr && b>=nl && a>=l && a<=r) break;
}
cout<<a<<" "<<b<<‘\n‘;
}return 0;
}
食堂排队
看懂题意,模拟就行了
排序时按照编号大小排序,因为给定的l是非降序的,所以只需要根据编号排序
从头开始枚举,每次做四件事
1.如果这个同学的时间超了就跳过后续三件事
2.如果这个同学的入队时间大于上个人打饭时间,时间就调整为当前入队时间
3.记录这个同学的打饭时间
4.时间+1(因为打饭需要一分钟
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
int t;const int maxn=1e3+10;
struct node{
int p,l,r;
}e[maxn];
bool cmp(node a,node b){
return a.p<b.p;
}
int ans[maxn];
int main(){
cin>>t;
while(t--){
cin>>n;memset(ans,0,sizeof(ans));
for(int i=1;i<=n;++i) cin>>e[i].l>>e[i].r,e[i].p=i;
sort(e+1,e+1+n,cmp);
int head=1;
for(int i=1;i<=n;++i){
node a=e[i];
if(head>a.r) continue;
if(head<a.l) head=a.l;
ans[a.p]=head;
++head;
}
for(int i=1;i<=n;++i) cout<<ans[i]<<" "; cout<<endl;
}
}