hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥

C - To Be an Dream Architect

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice HDU 3682

Appoint description: 
System Crawler  (2014-11-09)

Description

The “dream architect” is the key role in a team of “dream extractors” who enter other’s dreams to steal secrets. A dream architect is responsible for crafting the virtual world that the team and the target will dream into. To avoid the target noticing the world is artificial, a dream architect must have powerful 3D imagination.

Cobb uses a simple 3D imagination game to test whether a candidate has the potential to be an dream architect. He lets the candidate imagine a cube consisting of n×n×n blocks in a 3D coordinate system as Figure 1. The block at bottom left front corner is marked (1, 1, 1) and the diagonally opposite block is marked (n, n, n). Then he tells the candidate that the blocks on a certain line are eliminated. The line is always parallel to an axis. After m such block eliminations, the candidate is asked to tell how many blocks are eliminated. Note that one block can only be eliminated once even if it is on multiple lines.

Here is a sample graph according to the first test case in the sample input: 

Input

The first line is the number of test cases. 
In each test case, the first line contains two integers n and m( 1 <= n <= 1000, 0 <= m <= 1000).,meaning that the cube is n x n x n and there are m eliminations.

Each of the following m lines represents an elimination in the following format: 
axis_1=a, axis_2=b 
where axis_i (i=1, 2) is ‘X’ or ‘Y’, or ‘Z’ and axis_1 is not equal to axis_2. a and b are 32-bit signed integers.

Output

For each test case output the number of eliminated blocks.

Sample Input

2
3 2
Y=1,Z=3
X=3,Y=1
10 2
X=3,Y=3
Y=3,Z=3

Sample Output

5
19

数组名起的不好,燃烧生命

#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
int a,b,c,d;
bool xy[1001][1001],xz[1001][1001],yz[1001][1001];
int xylen[1001],yxlen[1001],yzlen[1001],zxlen[1001],zylen[1001],xzlen[1001];
char buff[100];
int xzheap[1001][2];
int read1(){
    int ans=0;
    for(int i=2;i<=6;i++){
        if(buff[i]>‘9‘||buff[i]<‘0‘)break;
        ans*=10;
        ans+=buff[i]-‘0‘;
    }
    return ans;
}
int read2(){
    int ans=0;
    int i=6;
    while(buff[i]>‘9‘||buff[i]<‘0‘){i++;}
    for(;;i++){
        if(buff[i]>‘9‘||buff[i]<‘0‘)break;
        ans*=10;
        ans+=buff[i]-‘0‘;
    }
    return ans;
}
void inset(char ch1,char ch2,int num1,int num2){
    if(ch1==‘X‘){
        if(ch2==‘Y‘){
            if(!xy[num1][num2]){
                a++;
                xy[num1][num2]=true;
                xylen[num1]++;
                yxlen[num2]++;
            }
        }
        if(ch2==‘Z‘){
            if(!xz[num1][num2]){
                xzheap[b][0]=num1;
                xzheap[b++][1]=num2;
                xz[num1][num2]=true;
                xzlen[num1]++;
                zxlen[num2]++;
            }
        }
    }
    if(ch1==‘Y‘){
        if(ch2==‘X‘){
            if(!xy[num2][num1]){
                a++;
                xy[num2][num1]=true;
                xylen[num2]++;
                yxlen[num1]++;
            }
        }
        if(ch2==‘Z‘){
            if(!yz[num1][num2]){
                c++;
                yz[num1][num2]=true;
                yzlen[num1]++;
                zylen[num2]++;
            }
        }
    }
    if(ch1==‘Z‘){
        if(ch2==‘X‘){
            if(!xz[num2][num1]){
                xzheap[b][0]=num2;
                xzheap[b++][1]=num1;
                xz[num2][num1]=true;
                xzlen[num2]++;
                zxlen[num1]++;
            }
        }
        if(ch2==‘Y‘){
            if(!yz[num2][num1]){
                c++;
                yz[num2][num1]=true;
                yzlen[num2]++;
                zylen[num1]++;
            }
        }
    }
}
void cl2ear(){
        a=b=c=d=0;
        memset(xy,0,sizeof(xy));
        memset(yz,0,sizeof(yz));
        memset(xz,0,sizeof(xz));
        memset(xylen,0,sizeof(xylen));
        memset(yxlen,0,sizeof(xylen));
        memset(zylen,0,sizeof(xylen));
        memset(yzlen,0,sizeof(xylen));
        memset(xzlen,0,sizeof(xylen));
        memset(zxlen,0,sizeof(xylen));
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        cl2ear();
        for(int i=0;i<m;i++){
            scanf("%s",buff);
            bool fl=false;
            char ch1,ch2;int num1=read1(),num2=read2();
            for(int j=0;buff[j];j++){
                if(buff[j]==‘X‘||buff[j]==‘Y‘||buff[j]==‘Z‘){
                    if(!fl){
                        ch1=buff[j];
                        fl=true;
                    }
                    else {
                        ch2=buff[j];
                        break;
                    }
                }
            }
            inset(ch1,ch2,num1,num2);
        }
        for(int i=0;i<b;i++){
            for(int j=1;j<=n;j++){
                if(xy[xzheap[i][0]][j]&&yz[j][xzheap[i][1]])d++;
            }
        }
        int ans=n*a+n*b+n*c+d;
        int a=0;
        for(int i=1;i<=n;i++){
            a+=xylen[i]*xzlen[i]+yzlen[i]*yxlen[i]+zxlen[i]*zylen[i];
           // a+=yxlen[i]*zxlen[i]+zylen[i]*xylen[i]+xzlen[i]*yzlen[i];
        }
        ans-=a;
        printf("%d\n",ans);
    }
    return 0;
}

  

时间: 2024-11-16 23:30:57

hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥的相关文章

hdu 3685 10 杭州 现场 F - Rotational Painting 重心

F - Rotational Painting Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3685 Appoint description:  System Crawler  (2014-11-09) Description Josh Lyman is a gifted painter. One of his great works

hdu 3687 10 杭州 现场 H - National Day Parade 暴力水题

H - National Day Parade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3687 Appoint description:  System Crawler  (2014-11-08) Description There are n×n students preparing for the National Day

hdu 4771 13 杭州 现场 B - Stealing Harry Potter&#39;s Precious 暴力bfs

Description Harry Potter has some precious. For example, his invisible robe, his wand and his owl. When Hogwarts school is in holiday, Harry Potter has to go back to uncle Vernon's home. But he can't bring his precious with him. As you know, uncle Ve

hdu 3695 10 福州 现场 F - Computer Virus on Planet Pandora 暴力 ac自动机

F - Computer Virus on Planet Pandora Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3695 Appoint description:  System Crawler  (2014-11-05) Description Aliens on planet Pandora also write comp

hdu 3699 10 福州 现场 J - A hard Aoshu Problem

Description Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. Nowadays, Aoshu is getting more and more difficult. Here is a classic Aoshu problem: ABBDE __ ABCCC = BDBDE In the equation above, a letter stands for

hdu 3694 10 福州 现场 E - Fermat Point in Quadrangle

In geometry the Fermat point of a triangle, also called Torricelli point, is a point such that the total distance from the three vertices of the triangle to the point is the minimum. It is so named because this problem is first raised by Fermat in a

hdu 3697 10 福州 现场 H - Selecting courses

Description A new Semester is coming and students are troubling for selecting courses. Students select their course on the web course system. There are n courses, the ith course is available during the time interval (A i,B i). That means, if you want

hdu 3696 10 福州 现场 G - Farm Game

Description “Farm Game” is one of the most popular games in online community. In the community each player has a virtual farm. The farmer can decide to plant some kinds of crops like wheat or paddy, and buy the corresponding crop seeds. After they gr

hdu 4770 13 杭州 现场 A - Lights Against Dudely 暴力 bfs

Description Harry: "But Hagrid. How am I going to pay for all of this? I haven't any money." Hagrid: "Well there's your money, Harry! Gringotts, the wizard bank! Ain't no safer place. Not one. Except perhaps Hogwarts." ― Rubeus Hagrid