UVA 10542 - Hyper-drive(容斥原理)
2014-09-05 12:41
141 查看
UVA 10542 - Hyper-drive
题目链接题意:给定一些个d维的方块,给定两点,求穿过多少方块
思路:容斥原理,每次选出一些维度,如果gcd(a, b),就会穿过多少点,对应的就减少穿过多少方块,所以最后得到式子d1 + d2 + .. dn - gcd(d1, d2)..+gcd(d1, d2, d3)...
代码:
#include <cstdio>
#include <cstring>
typedef long long ll;
int t, d, a[15];
int bitcount(int x) {
int ans = 0;
while (x) {
ans += (x&1);
x >>= 1;
}
return ans;
}
int gcd(int a, int b) {
while (b) {
int tmp = a % b;
a = b;
b = tmp;
}
return a;
}
int main() {
int cas = 0;
scanf("%d", &t);
while (t--) {
scanf("%d", &d);
for (int i = 0; i < d; i++)
scanf("%d", &a[i]);
int tmp;
for (int i = 0; i < d; i++) {
scanf("%d", &tmp);
a[i] -= tmp;
if (a[i] < 0) a[i] = -a[i];
}
ll ans = 0;
for (int i = 0; i < (1<<d); i++) {
int cnt = bitcount(i);
int sum = 0;
for (int j = 0; j < d; j++) {
if (i&(1<<j))
sum = gcd(sum, a[j]);
}
if (cnt&1) ans += sum;
else ans -= sum;
}
printf("Case %d: %lld\n", ++cas, ans);
}
return 0;
}
相关文章推荐
- Uva11806——容斥原理
- UVa11806 - Cheerleaders(容斥原理+状态压缩)
- UVALive 7040 Color (容斥原理 + 组合数学递推公式 + 求逆元 + 基础数论)
- uva 10325 容斥原理
- uva11806(容斥原理)拉拉队
- UVa10325 - The Lottery(容斥原理)
- uva 11806 Cheerleaders 容斥原理
- UVA 11806 - Cheerleaders(数论+容斥原理)
- UVA 11806 - Cheerleaders (容斥原理)
- uva 11806(容斥原理)
- uva 11806 Cheerleaders【容斥原理】
- UVa 11481 Arrange the Number(容斥原理)
- UVA 11806 Cheerleaders (容斥原理
- UVA 10325 lottery 容斥原理
- uva11806 - Cheerleaders 容斥原理
- UVa 11806 拉拉队(容斥原理)
- UVA 10209(Is This Integration ?-容斥原理)
- uva 11806 Cheerleaders (容斥原理)
- UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
- UVA 11806 Cheerleaders(容斥原理)