首页 > 其他分享 >[SDOI2013] 泉

[SDOI2013] 泉

时间:2023-10-18 15:57:05浏览次数:29  
标签:ull int long SDOI2013 base ans FL

考虑容斥。

我们记至少有 \(i\) 个指标相同的年份对数为 \(f_i\),那么最终答案为:

\[\sum_{i=k}^n (-1)^{i-k}\times f_i \]

\(f_i\) 可以通过枚举状态,之后通过字符串哈希来计数得到(注意指标只有 \(6\) 个)。字符串哈希可以把 base 设为 \(10^9+7\),模数设为 \(2^64\)(也即 unsigned long long)。

点击查看代码
#include <bits/stdc++.h>
#define FL(i, a, b) for(int i = (a); i <= (b); ++i)
#define FR(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
typedef unsigned long long ull;
const int N = 1e5 + 10;
const ull base = 1e9 + 7;
int n, k, a[N][6], C[7][7];
unordered_map<ull, int> m;
long long ans;
int main(){
	scanf("%d%d", &n, &k);
	FL(i, 0, 6){
		C[i][0] = 1;
		FL(j, 1, i){
			C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
		}
	}
	FL(i, 1, n) FL(j, 0, 5) scanf("%d", &a[i][j]);
	FL(s, 0, 63){
		int b = __builtin_popcount(s);
		unordered_map<ull, int>().swap(m);
		if(b >= k){
			FL(i, 1, n){
				ull v = 0;
				FL(j, 0, 5) if(s >> j & 1)
					v = v * base + a[i][j];
				ans += (((b - k) & 1)? -1ll : 1ll) * (m[v]++) * C[b][k];
			}
		}
	}
	printf("%lld\n", ans);
	return 0;
}

标签:ull,int,long,SDOI2013,base,ans,FL
From: https://www.cnblogs.com/zac2010/p/17772543.html

相关文章

  • 洛谷P3300 [SDOI2013] 城市规划 题解
    [SDOI2013]城市规划题意:给你一个\(6\timesn\)的网格题,单点修改,询问区间联通块数,\(n\le10^5\)。解:看起来就很显然的一道题......线段树每个点用一个ufs维护连通性;我为了方便思考把图转成横着的了。写起来真是毒瘤......重点在于:\(\bullet\)1、建立叶节点。\(\bull......
  • 题解 LuoguP3306 [SDOI2013] 随机数生成器
    题目链接:【LuoguP3306】。前置知识OI-Wiki:快速幂,扩展欧几里得算法(exgcd),BabyStep,GiantStep算法。题意很清楚,不说。分析当\(t=x\)时答案很明显为\(1\),即在第一天就可以读到。当\(t\neqx\)时当\(a=0\)时观察一下规律:\[x_1\equivx_1\pmod{p}\]\[x_2\equivb......
  • P3298 [SDOI2013]泉
    [SDOI2013]泉题目描述作为光荣的济南泉历史研究小组中的一员,铭铭收集了历史上$x$个不同年份时不同泉区的水流指数,这个指数是一个小于.$2^{30}$的非负整数。第\(i\)个年份时六个泉区的泉水流量指数分别为$A(i,l),A(i,2),A(i,3),A(i,4),A(i,5),A(i,6)$。现在铭铭希望知......
  • 题解 P3306 [SDOI2013] 随机数生成器
    Link它\(p\)都是质数了,这不就明示我们是bsgs了吗我没看出来然后我们来倒一下\(n\)天的式子第一天是\(x_1\),第二天是\(ax_1+b\),第三天是\(a^2x_1+(ab+b)\),第四......
  • [Sdoi2013] [bzoj 3198] spring (hash+容斥原理)
    题目描述给出个维坐标,求有多少对点对满足恰好个位置相等坐标数值在以内题目分析这道题一看就是hash容斥原理,用个位置对应相等个位置对应相等个位置对应相等的…但是不能......