• 题解 P6355 [COCI2007-2008#3] DEJAVU


    kcm的原题。。

    貌似是个组合数(?

    (sf Solution)

    对于每一个点,我们需要统计与它同一行的点数(a) 和同一列的点数(b) ,则该点对结果(ans) 的贡献为((a-1) imes (b-1))

    当然如果统计两重循环的话,那肯定是会TLE的啦。那么就要加一个预处理了:

    • 用两个map 数组分别统计(a)(b)

    • (m1_i) 就代表在第(i) 行的点数,(m2_j) 就代表在第(j) 列的点数。

    (之所以考虑用map是因为开数组可能会炸,后来发现好像不会……)

    (sf P.S)

    因为有乘运算,并且(nleq 10^5) ,所以不开long long是要炸掉的哦。

    (sf Code)

    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    struct node
    {
    	int x,y;
    }a[100004];
    int n;
    long long ans;
    map<long long,long long>m1,m2;//long long!
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    		scanf("%d%d",&a[i].x,&a[i].y);//读入
    	for(int i=1;i<=n;++i)
    		++m1[a[i].x],++m2[a[i].y];//分别统计行和列
    	for(int i=1;i<=n;++i)
    		ans+=(m1[a[i].x]-1)*(m2[a[i].y]-1);//根据那啥算
    	printf("%lld",ans);
    	return 0;
    }
    
  • 相关阅读:
    hdu5616 暴力枚举
    codeforce 35C fire again
    常用代码及经验总结(不断更新)
    codeforce AIM tech Round 4 div 2 B rectangles
    codeforce diversity
    codeforce 589B枚举
    codeforces 1A
    自学Java测试代码
    自学Jav测试代码三 Math类 & Date & GregorianCalendar类
    数学类与图形类
  • 原文地址:https://www.cnblogs.com/CM-0728/p/13476628.html
Copyright © 2020-2023  润新知