zoukankan      html  css  js  c++  java
  • 第二十次CCF计算机软件能力认证

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> P;
    bool cmp(P a, P b) {
    	if(a.first == b.first) {
    		return a.second < b.second;
    	}
    	return a.first < b.first;
    }
    int main () {
    	vector<P> v; 
    	ll n, x, y;
    	cin >> n >> x >> y;
    	for(int i = 0; i < n; ++i) {
    		ll a, b;
    		cin >> a >> b;
    		ll dis = (x - a) * (x - a) + (y - b) * (y - b);
    		v.push_back(P(dis, i + 1));
    	}
    	sort(v.begin(), v.end(), cmp);
    	for(int i = 0; i < 3; ++i) {
    		cout << v[i].second << endl;
    	}
    }
    

     

    #include <bits/stdc++.h>
    using namespace std;
    
    int main () {
    	int jingguo = 0;
    	int douliu = 0;
    	int n, k, t, xl, yd, xr, yu;
    	cin >> n >> k >> t >> xl >> yd >> xr >> yu;
    	while(n--) {
    		int x, y;
    		bool isjingguo = 0;
    		int temp = 0;
    		int maxx = -1;
    		for(int i = 0; i < t; ++i) {
    			cin >> x >> y;
    			if(x >= xl && x <= xr && y >= yd  && y <= yu) {
    				isjingguo = 1;
    				temp++;
    			}
    			else {
    				temp = 0;
    			}
    			maxx = max(temp, maxx);
    		}
    		if(maxx >= k) {
    			douliu++;
    		}
    		if(isjingguo) {
    			jingguo++;
    		}
    	}	
    	cout << jingguo << endl;
    	cout << douliu << endl;
    }
    

     

     

     

     记忆化DFS+拓扑排序判环

    #include <bits/stdc++.h>
    using namespace std;
    typedef struct
    {
    	std::vector<string> op_item;
    	string op;
    	int in;
    	int out;
    }Yuanjian;
    typedef struct
    {	
    	int op_num;
    	std::vector<int> input;
    	std::vector<int> output;
    }Guapi;
    typedef struct
    {
    	std::vector<int> mubiao;
    }Topoint;
    Topoint topoint[505];
    Yuanjian nb[505];
    int save[505];
    std::vector<int> input;
    int getNum(string op_item) {
    	int num = 0;
    	int quan = 1;
    	for(int i = op_item.size() - 1; i > 0; --i) {
    		num += (op_item[i] - '0') * quan;
    		quan *= 10;
    	}
    	return num;
    }
    bool getAns(Yuanjian temp) {
    
    	string op = temp.op;
    	if(op == "NOT") {
    		bool op_num;
    		if(temp.op_item[0][0] == 'O') {
    			if(save[getNum(temp.op_item[0])] == -1) {
    				save[getNum(temp.op_item[0])] = getAns(nb[getNum(temp.op_item[0])]);
    			}
    			op_num = save[getNum(temp.op_item[0])] ;
    		} else {
    			op_num = input[getNum(temp.op_item[0])];
    		}
    		return !op_num;
    	}
    	vector<bool> op_num(temp.op_item.size());
    	for(int i = 0; i < int(op_num.size()); ++i) {
    		if(temp.op_item[i][0] == 'O') {
    			if(save[getNum(temp.op_item[i])] == -1) {
    				save[getNum(temp.op_item[i])] = getAns(nb[getNum(temp.op_item[i])]);
    			}
    			op_num[i] = save[getNum(temp.op_item[i])];
    		} else {
    			op_num[i] = input[getNum(temp.op_item[i])];
    		}			
    	}
    	if(op == "AND") {
    		bool ans = op_num[0];
    		for(int i = 1; i < int(op_num.size()); ++i) {
    			ans &= op_num[i];
    		}
    		return ans;
    	}
    	if(op == "OR") {
    		bool ans = op_num[0];
    		for(int i = 1; i < int(op_num.size()); ++i) {
    			ans |= op_num[i];
    		}
    		return ans;
    	}
    	if(op == "XOR") {
    		bool ans = op_num[0];
    		for(int i = 1; i < int(op_num.size()); ++i) {
    			ans ^= op_num[i];
    		}
    		return ans;
    	}
    	if(op == "NAND") {
    		bool ans = op_num[0];
    		for(int i = 1; i < int(op_num.size()); ++i) {
    			ans &= op_num[i];
    		}
    		return !ans;
    	}
    	if(op == "NOR") {
    		bool ans = op_num[0];
    		for(int i = 1; i < int(op_num.size()); ++i) {
    			ans |= op_num[i];
    		}
    		return !ans;
    	}
    	return 0;
    }
    bool topSort(int N) {
    	queue<int> q;
    	for(int i = 1; i <= N; ++i) {
    		if(nb[i].in == 0) {
    			q.push(i);
    		}
    	}
    	std::vector<int> ans;
    	while(!q.empty()) {
    		int p = q.front();
    		q.pop();
    		ans.push_back(p);
    		for(int i = 0; i < topoint[p].mubiao.size(); ++i) {
    			int temp = topoint[p].mubiao[i];
    			nb[temp].in--;
    			if(nb[temp].in == 0) {
    				q.push(temp);
    			}
    		}
    	}
    	if(ans.size() != N) {
    		return 1;
    	} else {
    		return 0;
    	}
    }
    int main () {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	int Q;
    	cin >> Q;
    	while(Q--) {
    	//	Final final[10005];
    		int M, N;
    		cin >> M >> N;
    		for(int i = 1; i <= N; ++i) {
    			topoint[i].mubiao.clear();
    			nb[i].in = 0;
    			nb[i].out = 0;
    		}
    		bool isOK = 0;
    		for(int i = 1; i <= N; ++i) {
    			cin >> nb[i].op;
    			int num;
    			cin >> num;
    			nb[i].op_item.resize(num);
    			for(int j = 0; j < num; ++j) {
    				int first_num = i;
    				cin >> nb[i].op_item[j];
    				int second_num = getNum(nb[i].op_item[j]);
    				if(nb[i].op_item[j][0] == 'O' && first_num == second_num) {
    					isOK = 1;
    					continue;
    				}
    				if(nb[i].op_item[j][0] == 'O') {
    					
    					nb[first_num].in++;
    					nb[second_num].out++;
    					topoint[second_num].mubiao.push_back(first_num); 			
    				}
    			}
    		}
    		if(!isOK && topSort(N)) {
    			isOK = 1;
    		}
    		int S;
    		cin >> S;
    		std::vector<Guapi> guapi;
    		guapi.resize(S);
    		for(int i = 0; i < S; ++i) {
    			guapi[i].input.resize(M + 1);
    			for(int j = 1; j <= M; ++j) {
    				cin >> guapi[i].input[j];
    			}
    		}
    		for(int i = 0; i < S; ++i) {
    			cin >> guapi[i].op_num;
    			for(int j = 0; j < guapi[i].op_num; ++j) {
    				int temp;
    				cin >> temp;
    				guapi[i].output.push_back(temp);
    			}
    		}
    		if(isOK) {
    			cout << "LOOP" << endl;
    			continue;
    		}
    		for(int i = 0; i < S; ++i) {
    			std::vector<bool> ans;
    			input = guapi[i].input;
    			memset(save, -1, sizeof save);
    			for(int j = 0; j < guapi[i].output.size(); ++j) {
    				if(save[guapi[i].output[j]] == -1) {
    					save[guapi[i].output[j]] = getAns(nb[guapi[i].output[j]]);
    				}
    				cout << save[guapi[i].output[j]] << " ";
    			}
    			cout << endl;
    		}
    	}
    	return 0;
    }
    

     

     根据a和b+c的关系分成两种情况,剩下情况都是两个线段加上一段圆弧

     两个线段:由勾股定理求解。

     一段圆弧:先由余弦定理求出两点与到圆心直线夹角,然后由几何关系做差得到圆弧对应圆心角,乘以半径后得到弧长。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    double getDis(std::vector<ll> p1, std::vector<ll> p2) {
    	ll ans = 0ll;
    	for(int i = 0; i < p1.size(); ++i) {
    		ans += (p1[i] - p2[i]) * (p1[i] - p2[i]);
    	}
    	return sqrt(ans);
    }
    int main () {
    	double yuchuliDian[2002];
    	double ans[2002];
    	memset(ans, 0.0, sizeof ans);
    	memset(yuchuliDian, 0.0, sizeof yuchuliDian);
    	int n, m;
    	scanf("%d%d", &n, &m);
    	ll r;
    	scanf("%lld", &r);
    	std::vector<std::vector<ll> > point(m, std::vector<ll> (n));
    	std::vector<ll> xin;
    	for(int i = 0; i < n; ++i) {
    		ll temp;
    		scanf("%lld", &temp);	
    		xin.push_back(temp);	
    	}
    
    	for(int i = 0; i < m; ++i) {
    		for(int j = 0; j < n; ++j) {
    			scanf("%lld", &point[i][j]);
    		}
    	}
    	for(int i = 0; i < m; ++i) {
    		for(int j = i + 1; j < m; ++j) {
    			if(yuchuliDian[i] == 0.0) {
    				yuchuliDian[i] = getDis(point[i], xin);
    			}
    			if(yuchuliDian[j] == 0.0) {
    				yuchuliDian[j] = getDis(point[j], xin);
    			}
    			double io = yuchuliDian[i];
    			double jo = yuchuliDian[j];
    			double ij = getDis(point[i], point[j]);
    			double jiaoi = acos(double(r) / io);
    			double jiaoj = acos(double(r) / jo);
    			double jiaoioj = acos((io * io + jo * jo - ij * ij) / (2.0 * io * jo));
    			if(jiaoioj > jiaoi + jiaoj) {
    				double jiao = jiaoioj - jiaoi - jiaoj;
    				ans[i] += jiao * double(r) + sqrt(io * io - double(r * r)) + sqrt(jo * jo - double(r * r));
    				ans[j] += jiao * double(r) + sqrt(io * io - double(r * r)) + sqrt(jo * jo - double(r * r));
    			} else {
    				ans[i] += ij;
    				ans[j] += ij;
    			}
    		}
    	}
    	for(int i = 0; i < m; ++i) {
    		printf("%.14lf
    ", ans[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Leecode刷题之旅-C语言/python-67二进制求和
    maven 聚合
    maven 继承
    maven 常用命令
    maven 术语
    maven安装
    RabbitMQ 消费消息
    RabbitMQ 生产消息并放入队列
    RabbitMQ 在 web 页面 创建 exchange, queue, routing key
    mybatis 通过实体类进行查询
  • 原文地址:https://www.cnblogs.com/lightac/p/14016595.html
Copyright © 2011-2022 走看看