CSP-风险人群筛查Python-Java-C++实现(100分)

CSP-风险人群筛查Python-Java-C++实现(100分)

问题描述
在这里插入图片描述
C++源代码

#include<iostream>

using namespace std;
const int maxt=1000;
int dangerz[4];
int n,k,t;
int pnum=0;
int snum=0;

struct pos{
	int x;
	int y;
};

pos posarr[maxt];

void Init(){
	cin>>n>>k>>t;
	for(int i=0;i<4;i++){
		cin>>dangerz[i];
	}
}

bool pass(int x,int y){
	if(x>=dangerz[0]&&x<=dangerz[2]&&y<=dangerz[3]&&y>=dangerz[1]){
		return true;
	}
	else{
		return false;
	}
}

bool stay(int index){
	
//	cout<<"index"<<index<<endl;
	
	if(index+k>t){
		return false;
	}
	else{
		for(int i=0;i<k;i++){
			if(pass(posarr[i+index].x,posarr[i+index].y)==false){
			//	cout<<"false"<<i+index<<endl;
				return false;
			}
        }
     	return true;
	}
}

void check(){
	
	bool pflag;
	bool sflag;
	bool flag;
	for(int k=0;k<n;k++){
		
		pflag=false;
        sflag=false;
        flag=true;
		for(int i=0;i<t;i++){
		    cin>>posarr[i].x>>posarr[i].y;
		}
		
		for(int i=0;i<t;i++){
		    pflag=pass(posarr[i].x,posarr[i].y);
		    
		    if(pflag&&flag){
		    	pnum++;
		    	flag=false;
			}
			
		    if(pflag==true){
		    	sflag=stay(i);
		    	if(sflag){
		    		snum++;
		    		break;
				}
			}
	    }
	}
	cout<<pnum<<endl;
	cout<<snum<<endl;
}

int main(){
	Init();
	check();
	return 0;
}

Python源代码

# Screening.py
n,k,t,xl,yd,xr,yw = map(int,input().split())

pnum=0
snum=0

def Ispass(x,y):
    if x>=xl and y >= yd and x <= xr and y <= yw:
        return True
    else:
        return False



for i in range(n):
    sites=list(map(int,input().split()))
    pflag=False
    m=0
    while True:
        cnum=0
        while m<2*t and Ispass(sites[m],sites[m+1]):
            m+=2
            cnum+=1
            pflag=True
        m+=2
        if cnum>=k:
            snum+=1
            break
        if m>=2*t:
            break
    if pflag:
        pnum+=1


print(pnum)
print(snum)

Java源代码


import java.util.ArrayList;
import java.util.Scanner;

class Pos{
	public int x;
	public int y;
	public Pos(int x,int y) {
		this.x=x;
		this.y=y;
	}
}

public class Main {
	
	static int pnum=0;
	static int snum=0;
	static int danger[] = new int [4];
	
	public boolean Ispass(int x,int y){
		if(x>=danger[0]&&x<=danger[2]&&y>=danger[1]&&y<=danger[3]) {
			return true;
		}
		else {
			return false;
		}
	}
	public static void main(String argc[]) {
		int tempx,tempy;
		int cnum;//实际驻留的时间
		boolean pflag=false;
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		Main test=new Main();
		
		int n=sc.nextInt();
		int k=sc.nextInt();
		int t=sc.nextInt();
		for(int i=0;i<4;i++) {
			danger[i]=sc.nextInt();
		}
		for(int i=0;i<n;i++) {
			 ArrayList <Pos> arrayList = new ArrayList<>();
			 for(int j=0;j<t;j++) {
				 tempx=sc.nextInt();
				 tempy=sc.nextInt();
				 Pos pos=new Pos(tempx,tempy);
				 arrayList.add(pos);
			 }
			 pflag=false;
			 int j=0;
			 
			 do {
				 
			cnum=0;
			 while(j<arrayList.size() && test.Ispass(arrayList.get(j).x,arrayList.get(j).y)) {
				 cnum++;
				 j++;
				 pflag=true;
			 }
			 
			 if(cnum>=k) {
				 Main.snum++;
				 break;
			 }
			 
			 j++;
			 
			 }while(j<arrayList.size());
			 
			 if(pflag) {
				 Main.pnum++;
			 }
		}
		System.out.println(Main.pnum);
		System.out.println(Main.snum);
}
}

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值