首页 > 其他分享 >CSP 202006-1 202006-2 题解

CSP 202006-1 202006-2 题解

时间:2022-08-25 10:16:20浏览次数:98  
标签:int 题解 LL long 202006 CSP 向量 指针

# 202006-1 线性分类器

在坐标系中,我们可以考虑使用同一横坐标x值对应的y值来判断在直线的上方一侧还是在下方一侧。
当然,如果不在坐标系中也可以统计点和直线的位置关系,这个属于计算几何的内容,感兴趣的同学可以点击这个网址自己查阅相关内容,这里就不赘述了。
还有一点需要注意的是,本题计算过程中,两整数的相乘可能导致数据范围超过int范围,需要用 long long 来保存中间值。

#include <iostream>
using namespace std;
const int N = 1010;
typedef long long LL;

int n, m, x[N], y[N];
char str[N];

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ ) scanf("%d%d%s", &x[i], &y[i], &str[i]);
    while (m -- )
    {
        int a, b, c, A = 0, B = 0; // A和B用来计数属于A区域或B区域的每个点是否满足
        cin >> a >> b >> c;
        for (int i = 1; i <= n; i ++ ) // 这里只讨论A上B下的情况,另一种是对称的,如果是A下B上,统计结果应该是0
        {
            if (str[i] == 'A' && a + (LL)b * x[i] + (LL)c * y[i] > 0) A ++ ;
            if (str[i] == 'B' && a + (LL)b * x[i] + (LL)c * y[i] < 0) B ++ ;
        }
        if (A + B == n || !(A + B)) puts("Yes"); // 如果能完美分割,计数之和要么为n,要么为0
        else puts("No");
    }
    return 0;
}

202006-2 稀疏向量

双指针算法 类似于数据结构课上的归并排序
对于两个向量u和v,分别用指针i和j指向向量第一个非零位置,如果位置的下标相同,则值相乘累积到答案中;否则每次将下标较小的那个指针在对应的向量上向后(即下标增大的方向)移动一位,直到其中一个指针计算到对应向量的末尾。

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 5e5 + 10;

struct vtr {
	int index;
	int value;
} u[N], v[N];
int n, a, b;
LL ans = 0;

int main() {
	scanf("%d %d %d", &n, &a, &b);

	for (int i = 1; i <= a; i++) {
		int x, y;
		scanf("%d %d", &x, &y);
		u[i].index = x;
		u[i].value = y;
	}

	for (int i = 1; i <= b; i++) {
		int x, y;
		scanf("%d %d", &x, &y);
		v[i].index = x;
		v[i].value = y;
	}

	int i = 1, j = 1;
	for (i = 1, j = 1; i <= a && j <= b; ) {
		if (u[i].index == v[j].index) {
			ans += (LL)u[i].value * v[j].value;
			i++, j++;
		} else if (u[i].index < v[j].index) {
			i++;
		} else {
			j++;
		}
	}

	printf("%lld\n", ans);

	return 0;
}



标签:int,题解,LL,long,202006,CSP,向量,指针
From: https://www.cnblogs.com/superPG/p/16623268.html

相关文章

  • CSP认证(2022-06-12)
    Themorepeopleyoulove,theweakeryouare.Thethingswelovedestroyuseverytime.\(vscode\)也配置好了,\(html\)慢慢摸索着也能写些简单的本地网页了,\(CSP\)......
  • B3620 题解
    题目传送门\(\color{red}{see}\space\color{green}{in}\space\color{blue}{my}\space\color{purple}{blog}\)小学生又双叒叕来写题解啦!这题是\(x\)进制转\(10\)......
  • CF1646B 题解
    题目传送门\(\color{red}{see}\space\color{green}{in}\space\color{blue}{my}\space\color{purple}{blog}\)看到题解里没有用双指针往中间靠的写法的,果断来一发。思......
  • CF1624C 题解
    题目传送门\(\color{red}{see}\space\color{green}{in}\space\color{blue}{my}\space\color{purple}{blog}\)小学生又双叒叕来写题解啦!这题还是很简单的,甚至不需要像......
  • CF1617B 题解
    题目传送门\(\color{red}{see}\space\color{green}{in}\space\color{blue}{my}\space\color{purple}{blog}\)小学生又双叒叕来写题解啦!其他题解的代码都是\(O(1)\)......
  • CF402A 题解
    题目传送门\(\color{red}{see}\space\color{blue}{in}\space\color{green}{my}\space\color{purple}{blog}\)小学生又双叒叕来写题解啦!看到其他题解描述得并不清晰,我......
  • AT4894 题解
    题目传送门小学生又双叒叕来写题解啦!翻了一下大家的思路,都用了数组,其实根本不用,可以一边读入一边判断。由于只需考虑前后两个数,所以只用两个变量就能实现滚动数组。若......
  • AT4783 题解
    题目传送门小学生又双叒叕来写题解啦!这题的关键就是贪心。看到N的范围,瞬间明白可能要排序。所以我们靠着排序来想。我们来思考一下怎样安排顺序。对于两个时间限......
  • AT4891 题解
    题目传送门小学生又双叒叕来写题解啦!这题的翻译貌似不完整。所谓怪兽与英雄的对决,就是双方同时扣同样的血,直到一方为零。弄懂题后,你会发现,这题不是考贪心,而是模拟。写......
  • AT4573 题解
    题目传送门小学生又双叒叕来写题解啦!我来介绍一种与众不同的跑得更慢的方法,那就是排序加二分。排序的作用是为了二分,因为二分的前提是数组有序。因此读入完数据后排序......