ural 1932 The Secret of Identifier 容斥
2015-09-15 12:39
501 查看
主题链接:点击打开链接
stl+容斥
stl+容斥
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <iostream> #include <set> using namespace std; #define N 65540 #define ll __int64 ll n; ll a [4], mul[4]={1,16,256,4096}; ll h ; vector<ll>G ; set<ll>myset; set<ll>::iterator p; ll find1(ll x){ //设除了x位。其它3位同样 myset.clear(); for(ll i = 0; i < n; i++){ ll now = 0; for(ll j = 0; j < 4; j++)if(j!=x) now += a[i][j]; G[now].push_back(i); myset.insert(now); } ll ans = 0; for(p = myset.begin(); p!=myset.end(); p++) { ll siz = G[*p].size(); ans += (siz*(siz-1))>>1; G[*p].clear(); } return ans; } ll find2(ll x,ll y){ myset.clear(); for(ll i = 0; i < n; i++) { ll now = 0; for(ll j = 0; j < 4; j++)if(j!=x&&j!=y) now += a[i][j]; G[now].push_back(i); myset.insert(now); } ll ans = 0; for(p = myset.begin(); p!=myset.end(); p++) { ll siz = G[*p].size(); ans += (siz*(siz-1))>>1; G[*p].clear(); } return ans; } ll find3(ll x){ myset.clear(); for(ll i = 0; i < n; i++){ ll now = 0; now += a[i][x]; G[now].push_back(i); myset.insert(now); } ll ans = 0; for(p = myset.begin(); p!=myset.end(); p++) { ll siz = G[*p].size(); ans += (siz*(siz-1))>>1; G[*p].clear(); } return ans; } int main(){ ll i,j; for(ll i = 0; i < N; i++)G[i].clear(); while(cin>>n) { for(i=0;i<n;i++) { char s[10]; scanf("%s",s); for(j=0;j<4;j++) { a[i][j] = ('0'<=s[j]&&s[j]<='9')?s[j]-'0':s[j]-'a'+10; a[i][j] *= mul[j]; } } ll ans[5] = {0}; ans[1] = find1(0) + find1(1) + find1(2) + find1(3); ans[2] = find2(0,1) + find2(0,2) + find2(0,3) + find2(1,2) + find2(1,3) + find2(2,3) - ans[1]*3; ans[3] = find3(0) + find3(1) + find3(2) + find3(3) - ans[1]*3 - ans[2]*2; ll all = (ll) ((n*(n-1))/2); ans[4] = all - ans[1] - ans[2] - ans[3]; cout<<ans[1]<<" "<<ans[2]<<" "<<ans[3]<<" "<<ans[4]<<endl; } return 0; } /* 4 abcd abca abce abcf 10 0000 1111 2222 3333 4444 5555 6666 7777 8888 9999 */
相关文章推荐
- hdu 5442 Favorite Donut 最小表示法+KMP
- 【KMP】【HDU3746】【最小循环节】
- SQL语法优化
- TopCoder SRM 667 Div1 Problem 250 - OrderOfOperations (状压dp)
- ## 解决iOS消息列表显示时间的问题 ##
- 数据库Sharding的基本思想和切分策略
- 读取单个图片
- jsp页面function里面if判断失效
- 局域网中其他电脑访问我的电脑上的apache服务器
- 眼前的迷茫
- [动态规划]最长回文子串
- LeetCode 7 反转数字
- jdk的配置与测试
- 设计模式的六大原则
- 正则表达式口诀
- 二进制值和十六进制字符串相互转换的C++代码
- 关于swt 和一些小技巧
- Chapter 7 String to Integer
- win32下进程间通信——共享内存
- MATLAB学习总结(1)