0%

CSP

CPS

202104-1灰度直方图

#include<iostream>
using namespace std;
int main()
{
    int n,m,l;
	cin>>n>>m>>l;
	int h[256]={0};
	int x;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>x;
			h[x]++;
		}
	}
	for(int i=0;i<l;i++){
		cout<<h[i]<<" ";
	}
	cout<<endl;	
}

202104-2邻域均值

//超时70分,未想出解决超时的办法
#include<iostream>
using namespace std;
#define L 256
#define N 100
int main()
{
	int n,l,r,t;
	cin>>n>>l>>r>>t;
	int h[L]={0};
	int a[N][N]={0};
	int lowt=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>a[i][j];
			h[a[i][j]]++;
		}
	
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
		int maxx=i+r>n-1?n-1:i+r;
		int maxy=j+r>n-1?n-1:j+r;
		int minx=i-r<0?0:i-r;
		int miny=j-r<0?0:j-r;
		double count=0;
		double sum=0;
		for(int x=minx;x<=maxx;x++){
			for(int y=miny;y<=maxy;y++){
				sum+=a[x][y];
				count++;
			}
		}
		sum=sum/count;
		if(sum<=t)lowt++;	
    }
  }
        cout<<lowt;
}

202012-1期末预测之安全指数

#include<iostream>
using namespace std;
int main(){
	int n;
	int w,score;
	cin>>n;
	int sum=0;
	for(int i=0;i<n;i++){
		cin>>w>>score;
		sum+=w*score;
	}
	if(sum<0){
		sum=0;
	}
	cout<<sum;
} 

202012-2期末预测之最佳阈值

#include<iostream>
#include<algorithm>

using namespace std;
typedef struct Node{
	int theta;
	int predict;
}Node;

bool cmp(Node a,Node b){
	return a.theta<b.theta;
} 
int main(){
	int m;
	Node node[100005];
	int flag0[100005]={0}; //记录小于每个位置点阈值的result=0的个数 
	int flag1[100005]={0}; //记录大于等于每个位置点阈值的result=1的个数  
	cin>>m;
	for(int i=0;i<m;i++){
		cin>>node[i].theta>>node[i].predict;
	}
	sort(node,node+m,cmp); //输入后排序  	
	int thetaid=0;
	int max=0;
//	记录小于每个位置点阈值的result=0的个数
	for(int i=1;i<=m;++i){
		if(node[i].predict==0){
			flag0[i]=flag0[i-1]+1;
		}
		else{
			flag0[i]=flag0[i-1];
		}	
	}
//记录大于等于每个位置点阈值的result=1的个数 	
	for(int i=m;i>=1;--i){
		if(node[i].predict==1){
			flag1[i]=flag1[i+1]+1;}
		else{
			flag1[i]=flag1[i+1];}
	}	

	for(int i=1;i<=m;++i){
		if(node[i].theta==node[i-1].theta){
				continue;}
		if(flag0[i-1]+flag1[i]>=max){
		max=flag0[i-1]+flag1[i];
		thetaid=node[i].theta;}
	}
	cout<<thetaid;
	return 0;
}

202009-1称检测点查询

#include<iostream>
#include<math.h>
#include<algorithm> 
using namespace std;

typedef struct Node{
	int x;
	int y;
	int id;
	double distance; 
}Node;

bool cmp (Node a,Node b){
	if(a.distance!=b.distance){
		return a.distance<b.distance;
	}
	return a.id<b.id;
}
//编写sort的排序方法,如果没有,默认从小到大排血 

int main(){
	int n,x,y;
	Node node[500];
	cin>>n>>x>>y;
	for(int i=0;i<n;i++){
		cin>>node[i].x>>node[i].y;
		node[i].id=i+1;
		node[i].distance=sqrt((node[i].x-x)*(node[i].x-x)+(node[i].y-y)*(node[i].y-y));
		
		 
	}
	sort(node,node+n,cmp);
	for(int i=0;i<3;i++){
		cout<<node[i].id<<endl;
	}
} 

202009-2风险人群筛查

#include<iostream>
using namespace std;

typedef struct Node{
	int x,y;
	int through,danger,k;
}Node; 
int main(){
	int t,k,n,x1,y1,x2,y2;
	int through=0,danger=0;
	cin>>t>>k>>n>>x1>>y1>>x2>>y2;
	for(int i=0;i<t;i++){
		Node node;
		node.through=0;
		node.danger=0;
		node.k=0;
		for(int j=0;j<n;j++){
			int x,y;
			cin>>x>>y;
			if(x1<=x&&x<=x2&&y1<=y&&y<=y2){
				node.through=1;
				node.k+=1;
				if(node.k==k){
					node.danger=1; 	}
			  }//连续k个或更多坐标均位于矩形内(含边界),
			  //则认为该居民曾在高危区域逗留。 
			else node.k=0 ;  
			} 	
			through+=node.through;
			danger+=node.danger;
	}		
	cout<<through<<endl<<danger;
}

202006-1线性分类器

#include<iostream>
#include<set>
#include<algorithm> 
using namespace std; 

typedef struct Node{
	double x,y;
	char type;
}Node;

int main(){
	int n,m;
	Node node[1001];
	cin>>n>>m;
	for (int i=0;i<n;i++){
		cin>>node[i].x>>node[i].y>>node[i].type;		
	}
	
	double n0,n1,n2;
	
	while(m--){
		cin>>n0>>n1>>n2;
		set<char> up,down;
		for( int i=0;i<n;i++){
			if(n0+n1*node[i].x+n2*node[i].y>0){
				up.insert(node[i].type);
			}else {
		     	down.insert(node[i].type);
		    }
		}
	//在set中,size()返回的元素种类的个数,同一种元素即使有很多个,也算一个
	//所以我们可以用来判断分类是否正确,
	//如果set不是同一种元素,即size()的值大于1,则分类错误,反之则正确 
	if(up.size()>1||down.size()>1){
		cout<<"No"<<endl;
	}
	else {
	cout<<"Yes"<<endl;
    }
	}	
}

202006-2稀疏向量解法一

#include<iostream>
using namespace std;
int main(){
	int n,a,b;
	cin>>n>>a>>b;
	int index,value;
	long long result=0;

	int *arraya=new int[n];
	int *arrayb=new int[n];
	
	for(int i=0;i<n;i++){
		arraya[i]=0;
		arrayb[i]=0;
	}
	for(int i=0;i<a;i++){
		cin>>index>>value;
		arraya[index]=value;
	}
	for(int j=0;j<b;j++){
		cin>>index>>value;
		arrayb[index]=value;
	}
	for(int k=0;k<n;k++){
		result+=arraya[k]*arrayb[k];	
	}
	cout<<result<<endl;	
	delete [] arraya; 
	delete [] arrayb; 
	return 0;
}