出行计划
要在t时刻进入场所,获得核酸检测结果的时间点(t+k应该在[t-c+1,t]内(上段文字中c值为24),核酸检测结果才能生效。由于获得核酸检测结果的时刻>=1(因为等待核酸检测结果的时间k>0,所以获得核酸检测结果的时刻总是>=1),因此上述区间可以改为 [max(1,t-c+1),t]。且针对n个出行计划的输入,都能对应一个上述区间。如下:
5 24—>[1,5]
10 24—>[1,10]
11 24—>[1,11]
34 24—>[11,34]
35 24—>[12,35]
35 48—>[1,35]
#include <bits/stdc++.h>
using namespace std;
const int maxn=4e+6;
int n,m,k;
int s[maxn],b[maxn];
int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++){int t,c;cin>>t>>c;int left=t-c+1;left=left>0?left:1;int right=t;b[left]++;b[right+1]--; //b数组初始时为0,对b数组做n次 特定区间加1的操作//所以验证包含输入值q的区间个数==b[1]+...+b[q],即b的前q项和。 }for(int i=1;i<=maxn;i++){b[i]=b[i-1]+b[i];}while(m--){int x;cin>>x;cout<<b[x+k]<<endl;//直接得到x+k处的数值}return 0;
}
期末预测之最佳阈值
(一组二维数字,按照第一列数字升序排列)
6
0 0
1 0
1 1
3 1
5 1
7 1
加入选定一个标准为3,则统计第一列小于3,第二列是0, 第二列大于等于3,第二列是1 的和
结果返回阈=标准值3;
知识点前缀和+结构体运用;
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+12;
int n;
struct point{int x,y;int temp;int head0,tail1;
}node[maxn];
//struct point 一定在bool comp上面bool comp(point a,point b){return a.x<b.x;
}
//结构体升序排列; int main(){cin>>n;int max=0,ans;node[0].head0=0;node[n+1].tail1=0;for(int i=1;i<=n;i++){cin>>node[i].x>>node[i].y;// node[i].temp=0;node[i].head0=0;node[i].tail1=0;}sort(node+1,node+1+n,comp);for(int i=1;i<=n;i++){//统计升序之后的序列 某阈值前0的个数,并用结构体的一个变量head0记录; if(node[i].y==0)node[i].head0=node[i-1].head0+1;elsenode[i].head0=node[i-1].head0;}for(int i=n;i>=1;i--){统计升序之后的序列 某阈值后1的个数,并用结构体的一个变量tail1记录; if(node[i].y==1)node[i].tail1=node[i+1].tail1+1;elsenode[i].tail1=node[i+1].tail1;}for(int i=1;i<=n;i++){if(node[i].x==node[i-1].x)continue;if(max<=node[i-1].head0+node[i].tail1)//寻找 某个值 头0和尾1个数和 的最大值 并返回改值; {max=node[i-1].head0+node[i].tail1;ans=node[i].x;} }
cout<<ans;
return 0;
}
称检测点查询
主要知识点 sort 函数 考虑两个变量来升序排列
bool comp(point a,point b){
if(a.juli!=b.juli) return a.juli<b.juli;
if(a.num!=b.num) return a.num<b.num;
//首先按照juli从小到大排序,juli相同时 按照num从小到达排序;
//即首要考虑juli 再考虑num
}
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+12;
struct point{int num;int x,y;int juli;
}node[maxn];bool comp(point a,point b){
if(a.juli!=b.juli) return a.juli<b.juli;
if(a.num!=b.num) return a.num<b.num;
//首先按照juli从小到大排序,juli相同时 按照num从小到达排序;
//即首要考虑juli 再考虑num
}
//结构体升序排列;
int isin(int a,int b,int a1,int b1){return (b1-b)*(b1-b)+(a1-a)*(a1-a);
}
int main(){
int n,x0,y0;cin>>n>>x0>>y0;int min=1<<31;for(int i=1;i<=n;i++){node[i].num=i;cin>>node[i].x>>node[i].y;node[i].juli=isin(x0,y0,node[i].x,node[i].y);}//forsort(node+1,node+1+n,comp);
for(int i=1;i<=3;i++)
cout<<node[i].num<<endl;
return 0;
}