uvalive4835(模拟)

来源:互联网 发布:ipv6商业应用网络 编辑:程序博客网 时间:2024/05/16 08:43

题意:

给出n*n*n的一个魔方,有m个操作,每次操作我们删除这个魔方的一行格子,问经过所有操作之后还剩多少个格子。


思路:

模拟,每次进行操作的时候,用pair<pair<>>标记被删除的格子,用set维护。


代码:

#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<cstdlib>#include<vector>#include<queue>#include<map>#include<stack>#include<cstring>#include<cstring>#include<climits>#include<sstream>#include <set>using namespace std;struct Node {char c1, c2;int a, b;}node[1005];typedef pair<pair<int, int>, int> PII;set<PII> s;int main(){int n, m;int t;scanf("%d",&t);while(t--) {scanf("%d %d",&n, &m);s.clear();for(int i = 1; i <= m; i++) {scanf("\n%c=%d,%c=%d", &node[i].c1,&node[i].a, &node[i].c2, &node[i].b);//printf("%c=%d,%c=%d\n", node[i].c1,node[i].a, node[i].c2, node[i].b);if(node[i].c1 == 'X' && node[i].c2 == 'Y') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(node[i].a, node[i].b),j));}} else if(node[i].c1 == 'Y' && node[i].c2 == 'X') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(node[i].b, node[i].a),j));}} else if(node[i].c1 == 'X' && node[i].c2 == 'Z') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(node[i].a, j),node[i].b));}} else if(node[i].c1 == 'Z' && node[i].c2 == 'X') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(node[i].b, j),node[i].a));}} else if(node[i].c1 == 'Y' && node[i].c2 == 'Z') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(j, node[i].a),node[i].b));}} else if(node[i].c1 == 'Z' && node[i].c2 == 'Y') {for(int j = 1; j <= n; j++) {s.insert(make_pair(make_pair(j, node[i].b),node[i].a));}}}printf("%d\n", s.size());}return 0;}


0 0