CSP 2020-9

1.称监测点查询

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll px,py;
#define N 210
struct node{
	ll x,y,p;
	bool operator<(const node &nd)const{
	ll dis1=(this->x-px)*(this->x-px)+(this->y-py)*(this->y-py);
	ll dis2=(nd.x-px)*(nd.x-px)+(nd.y-py)*(nd.y-py);
	if(dis1==dis2) return p<nd.p;
	return dis1<dis2;
	}
} ns[N];

//  只需找出一个市民 的 距离其最近的三个监测点
//  因此我们将市民坐标设为全局变量,对所有监测点排序即可 
//  监测点只有200个,不会超时
int main(){
	int n;
	cin>>n>>px>>py;
	for(int i=0;i<n;i++){
		int xx,yy;
		cin>>xx>>yy;
		ns[i]=(node){xx,yy,i+1};
	}
	
	sort(ns,ns+n);
	
	for(int i=0;i<3;i++)
	cout<<ns[i].p<<endl;
}

2.风险人群筛查
很简单的细节题

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define N 10010
//风险地区只有一个,因此可以用四个变量来存风险地区的坐标
int n,k,t,xl,yd,xr,yu;
inline bool is_in(int x,int y){
	return x>=xl&&x<=xr&&y>=yd&&y<=yu;	
}
int xx[N],yy[N];	
int pass=0,stay=0;

void solve(){
	int pp=0,ss=0;
	for(int i=0;i<t;i++)
	cin>>xx[i]>>yy[i];
	int cnt=0;
	for(int i=0;i<t;i++){
		if(is_in(xx[i],yy[i])){
			pp=1;
			cnt++;
		}else{
			cnt=0;
		}
		if(cnt>=k) ss=1;
	}
	
	pass+=pp;
	stay+=ss;
}
int main(){
	cin>>n>>k>>t>>xl>>yd>>xr>>yu;
	while(n--){
		solve();
	}
	cout<<pass<<endl<<stay;
} 

3.点亮数字人生
官网上可A
ACWING上wa

#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define ll long long
#define N 10010
//思路 : bfs 
// 每个元器件记录它连接了谁,它被谁连接 
int outs[510]; //元器件的输出
int ins[2510]; //元器件的输入
int n,m;
struct conn{
	char typ;
	int k;
};
struct node{
	string typ;
	vector<int> to;
	vector<conn> from;
	int alive; //alive记录当前yqj有多少输入端需要被唤醒
	int c;		//c记录当前yqj已经唤醒了多少输入端 
	node(){
		alive=0;
		c=0;
	}
	int NOT(){
		if(from[0].typ=='I')
		return !ins[from[0].k];
		else return !outs[from[0].k];
	}
	int AND(){
		int ans=1;
		for(conn cc:from){
			if(cc.typ=='I')
			ans&=ins[cc.k];
			else ans&=outs[cc.k];
		}
		return ans;
	}
	int OR(){
		int ans=0;
		for(conn cc:from){
			if(cc.typ=='I')
			ans|=ins[cc.k];
			else ans|=outs[cc.k];
		}
		return ans;
	}
	int XOR(){
		int ans=0;
		for(conn cc:from){
			if(cc.typ=='I')
			ans+=ins[cc.k];
			else ans+=outs[cc.k];
		}
		return ans%2;
	}
	int NAND(){
		return !AND();
	}
	int NOR(){
		return !OR();
	}
	int get(){
		int ans;
	if(typ=="NOT"){
		ans=NOT();
	}else if(typ=="AND"){
			ans=AND();
	}else if(typ=="OR"){
			ans=OR();
	}else if(typ=="XOR"){
			ans=XOR();
	}else if(typ=="NAND"){
			ans=NAND();
	}else  	ans=NOR();
	return ans;
	}
}yqj[510]; 
int s_i(const string &s){
	int ans=0;
	for(int i=0;i<s.length();i++){
		ans=ans*10+s[i]-'0';
	}
	return ans;
}
int run(vector<int> &in){	//返回该次运行是否成功
	memset(outs,-1,sizeof(outs)); 
	for(int i=1;i<=m;i++)
	ins[i]=in[i-1];
	
	queue<int> q;
	//先运行再处理输出
	for(int i=1;i<=n;i++){
		yqj[i].c=0;
		if(yqj[i].alive==0){
			q.push(i);
		}
	}
	
	while(q.size()){
		int top=q.front();
		q.pop(); //得到当前运行的元器件 
		
		int res=yqj[top].get();
		outs[top]=res;
		for(int to:yqj[top].to){
			yqj[to].c++;
			if(yqj[to].c==yqj[to].alive){
				q.push(to);
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(outs[i]==-1) {
			return false;
		}
	}
	return true;
}

void solve(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>yqj[i].typ;
		yqj[i].from.clear();
		yqj[i].to.clear();
		yqj[i].alive=0;
		
		
		int k;
		cin>>k;
		while(k--){
		string s;
		cin>>s;
		int c=s_i(s.substr(1));
		if(s[0]=='I'){ //由输入端连接 
			yqj[i].from.push_back((conn){s[0],c});
		}else{
			yqj[i].from.push_back((conn){s[0],c});
			yqj[c].to.push_back(i);
			yqj[i].alive++;
		}
		}
	} //处理完输入
	vector<vector<int> > input;
	int s;
	cin>>s;
	for(int i=0;i<s;i++){
	 	vector<int> temp;
	 	int t;
	 	for(int i=0;i<m;i++){
	 		cin>>t;
	 		temp.push_back(t);
		}
		input.push_back(temp);
	}
	 
	vector<vector<int> > out;
	for(int i=0;i<s;i++){
	vector<int> temp;
	 	int t;	 		
		 cin>>t;
		 while(t--){
		 	int tt;
		 	cin>>tt;	 		
			temp.push_back(tt);
		 }		
		 out.push_back(temp);
	}
	
	for(int i=0;i<s;i++){
		if(run(input[i])){
			for(int j:out[i])
			cout<<outs[j]<<" ";
			cout<<endl;
		}else {
			cout<<"LOOP"<<endl;
			break;
		}
	}
}
int main(){
	int Q;
	cin>>Q;
	while(Q--){
		solve();
	}
}

200行太恶心了
4.解析几何,先跳过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值