栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 2032 Overlapping Objects

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 2032 Overlapping Objects

#include <cstdio>#include <algorithm>using namespace std;class BigInteger{private:    static const int LEN = 16;    static const int MOD = 10000;    int a[LEN];public:    BigInteger(int x = 0)    {        for (int i = 0; i < LEN; i++) a[i] = 0;        a[0] = x;    }    bool zero() const    {        for (int i = 0; i < LEN; i++) if(a[i] != 0)     return false;        return true;    }    void mul(int x)    {        for (int i = 0; i < LEN; i++) { a[i] *= x; if(i > 0 && a[i - 1] >= MOD) {     a[i] += a[i - 1] / MOD;     a[i - 1] %= MOD; }        }    }    void add(const BigInteger& b)    {        for (int i = 0; i < LEN; i++) { a[i] += b.a[i]; if(a[i] >= MOD) {     ++a[i + 1];     a[i] -= MOD; }        }    }    void sub(const BigInteger& b)    {        for (int i = 0; i < LEN; i++) { a[i] -= b.a[i]; if(a[i] < 0) {     --a[i + 1];     a[i] += MOD; }        }    }    void out() const    {        int p = LEN - 1;        while(p > 0 && a[p] == 0) --p;        printf("%d", a[p--]);        while(p >= 0) printf("%04d", a[p--]);        printf("n");    }};int m, n, p[3][12][2];void gao(void){    BigInteger a = 1;    for (int i = 0; i < m; i++)        a.mul(p[0][i][1] - p[0][i][0]);    printf("1 ");    a.out();}void zaigao(void){    BigInteger a1 = 1, a2 = 1, b = 1;    for (int i = 0; i < m; i++) {        a1.mul(p[0][i][1] - p[0][i][0]);        a2.mul(p[1][i][1] - p[1][i][0]);        b.mul(max(0, min(p[0][i][1], p[1][i][1]) - max(p[0][i][0], p[1][i][0])));    }    a1.add(a2);    a1.sub(b);    a1.sub(b);    if(!a1.zero()) {        printf("1 ");        a1.out();    }    if(!b.zero()) {        printf("2 ");        b.out();    }}void jiezhegao(void){    BigInteger a0(1), a1(1), a2(1), b01(1), b02(1), b12(1), c(1);    for (int i = 0; i < m; i++) {        a0.mul(p[0][i][1] - p[0][i][0]);        a1.mul(p[1][i][1] - p[1][i][0]);        a2.mul(p[2][i][1] - p[2][i][0]);        b01.mul(max(0, min(p[0][i][1], p[1][i][1]) - max(p[0][i][0], p[1][i][0])));        b02.mul(max(0, min(p[0][i][1], p[2][i][1]) - max(p[0][i][0], p[2][i][0])));        b12.mul(max(0, min(p[1][i][1], p[2][i][1]) - max(p[1][i][0], p[2][i][0])));        c.mul(max(0, min(p[0][i][1], min(p[1][i][1], p[2][i][1])) - max(p[0][i][0], max(p[1][i][0], p[2][i][0]))));    }    a0.add(a1);a0.add(a2);a0.add(c);a0.add(c);a0.add(c);    a0.sub(b01);a0.sub(b01);a0.sub(b02);a0.sub(b02);a0.sub(b12);a0.sub(b12);    if(!a0.zero()) {        printf("1 ");        a0.out();    }    b01.add(b02);    b01.add(b12);    b01.sub(c);b01.sub(c);b01.sub(c);    if(!b01.zero()) {        printf("2 ");        b01.out();    }    if(!c.zero()) {        printf("3 ");        c.out();    }}int main(void){    while(scanf("%d%d", &m, &n) != EOF && m > 0 && n > 0) {        for (int i = 0; i < n; i++) for (int j = 0; j < m; j++)     scanf("%d%d", &p[i][j][0], &p[i][j][1]);        switch(n) { case 1: gao(); break; case 2: zaigao(); break; case 3: jiezhegao(); break;        }    }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号