CCF2020.06第一二题总结

2 篇文章 0 订阅
#include <iostream>
using namespace std;
int n, m;
//出现的问题:输入的时候p1n++重复;
//while (scanf_s("%d %d %d", &q0, &q1, &q2) != EOF)没有深刻了解这个原理
struct point
{
	int x;
	int y;
	char t;
	//默认构造函数初始化
	point (int x_,int y_,char t_):x(x_),y(y_),t(t_){}//默认的构造函数
}p1[1001],p2[1001];
int judge(point a, int q0, int q1,int  q2)
{
	if ((q0 + q1 * a.x + q2 * a.y) > 0)return 1;
	else return -1;
}
int main()
{
	cin >> n >> m;
	int x1, y1;
	char t1;
	int p1n=0, p2n = 0;
	//输入点数据
	for (int i = 0; i < n; i++)
	{
		cin >> x1 >> y1 >> t1;
		if (t1 == 'A') 
		{ 
			p1[p1n].x = x1;
			p1[p1n].y = y1;
			p1[p1n].t = t1;
			p1n++;
		}
		else {
			p2[p2n].x = x1;
			p2[p2n].y = y1;
			p2[p2n].t = t1;
			p2n++;
		}
	}
    //判断每个输入直线
	int q0, q1, q2;
	//while (scanf_s("%d %d %d", &q0, &q1, &q2) != EOF)
	for(int n=0;n<m;n++)
	{ 
		scanf_s("%d %d %d", &q0, &q1, &q2);
		if (judge(p1[0], q0, q1, q2) > 0)
		{
			int i, j;
			for (i = 1; i < p1n; i++)
			{
				if (judge(p1[i], q0, q1, q2) < 0)break;
			}
			for (j = 0; j < p2n; j++)
			{
				if (judge(p2[j], q0, q1, q2) > 0)break;
			}
			if (i == p1n && j == p2n)printf("Yes\n");
			else printf("No\n");
		}
		if (judge(p1[0], q0, q1, q2) < 0)
		{
			int i, j;
			for (i = 1; i < p1n; i++)
			{
				if (judge(p1[i], q0, q1, q2) > 0)break;
			}
			for (j = 0; j < p2n; j++)
			{
				if (judge(p2[j], q0, q1, q2) < 0)break;
			}
			if (i == p1n && j == p2n)printf("Yes\n");
			else printf("No\n");
		}
	}
	return 0;
}
// svector.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
//1:算法笔记P45:申请较大的空间要定义在主函数外面,否则程序异常退出
//2:直接遍历超时,因此采用归并排序的思想
//3:提高输入和输出速度:https://www.cnblogs.com/fate-/p/13393892.html
//4:结果值应该为longlong
#include <iostream>
using namespace std;
const int max = 500001;
int u[500010][2], v[500010][2];
//二维数组开的太大了,导致异常
//c错误原因,
int main()
{
	//增加输入输出速度
	//ios::sync_with_stdio(false);
	ios::sync_with_stdio(false);
	int n, a, b;
	cin >> n >> a >> b;	
	for (int i = 0; i < a; i++)
	{
		cin >> u[i][0] >> u[i][1];
	}
	for (int i = 0; i < b; i++)
	{
		cin >> v[i][0] >> v[i][1];
	}
	long long sum = 0;
	int i=0, j=0;
	//使用归并排序的思想减少遍历的次数
	while (i < a&&j < b)
	{
		if (u[i][0] < v[j][0])
		{
			i++;
		}
		else if (u[i][0] > v[j][0])
		{
			j++;
		}
		else {
			sum += u[i][1] * v[j][1];
			i++; 
			j++;
		}
	}
	/*ctrl+k+c注释多行
	for (int i = 0; i < a; i++)
	{
		for (int j = 0; j < b; j++)
		{
			if (u[i][0] == v[j][0])
			{
				sum += u[i][1] * v[j][1];
				break;
			}
		}
	}*/
	printf("%lld", sum);
	return 0;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值