设为首页 加入收藏

TOP

uva 10542 - Hyper-drive(容斥)
2015-07-20 18:00:48 来源: 作者: 【 】 浏览:1
Tags:uva 10542 Hyper-drive 容斥

题目链接:uva 10542 - Hyper-drive

题目大意:给定n维空间的线段,问说线段经过几个格子。

解题思路:对于线段可以将一点移动至原点,变成
(0,0)到(a,b)这条线段,以二维为例,每次会从一个格子移动到另一个格子,可以是x+1坐标,也可以是y+1,所以总的应该是a+b-1,扣除掉x+1,y+1的情况gcd(a,b)-1 (原点)。映射成n维就要用容斥原理计算结果。

/***********************
 * (0, 0, 0, ...) -> (a, b, c, ...)
 * ans = a + b + c +.. - gcd(a,b) - gcd(a,c) - .. + gcd(a, b, c) ...
***********************/

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         using namespace std; typedef long long ll; const int maxn = 15; int N, d[maxn], g[2][maxn]; inline int gcd (int a, int b) { return b == 0 ? a : gcd (b, a%b); } void init () { scanf("%d", &N); for (int i = 0; i < 2; i++) for (int j = 0; j < N; j++) scanf("%d", &g[i][j]); for (int i = 0; i < N; i++) d[i] = abs(g[0][i] - g[1][i]); } ll solve () { ll ans = 0; for (int i = 1; i < (1<
        
       
      
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces 155 C.Double Profiles 下一篇poj 3663 Costume Party [简单搜..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: