AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer
题目传送门:https://arc062.contest.atcoder.jp/tasks/arc062_c
题目大意:
给你\(N\)块正方形木板,每块木板四角有四种颜色(可以相同),木板中央有编号,求选出6块不同的板子,围成的本质不同的合法立方体的个数。一个合法立方体,当且仅当木板有编号的一面在外面,且立方体顶点处的三个颜色相同。由于编号的存在,木板可以有4种形态。两个立方体本质相同,当且仅当存在一种空间旋转方式,使得两个立方体一模一样(包括编号方向)
没想到这题巨暴力……当我们确定对面的两块木板后,整个立方体就确定了……暴力枚举,然后去重一下就做完了……
/*program from Wolfycz*/
#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Fi first
#define Se second
#define inf 0x7f7f7f7f
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){static char buf[1000000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){int x=0,f=1; char ch=gc();for (;ch<'0'||ch>'9';ch=gc()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=gc()) x=(x<<3)+(x<<1)+ch-'0';return x*f;
}
inline int read(){int x=0,f=1; char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';return x*f;
}
inline void print(int x){if (x<0) putchar('-'),x=-x;if (x>9) print(x/10);putchar(x%10+'0');
}
const int N=4e2;
int C[N+10][4];
ll v[N+10];
map<ll,int>Mp;
ll Hash(int a,int b,int c,int d){return ((ll)a<<30)|((ll)b<<20)|((ll)c<<10)|(ll)d;}
void Add(ll x,int v){//一种Hash方法for (int i=0;i<4;i++,x=(x>>10)|((x&1023)<<30)){if (Mp.find(x)==Mp.end()) Mp.insert(map<ll,int>::value_type(x,0));Mp.find(x)->Se+=v;}
}
int main(){int n=read(); ll Ans=0;for (int i=1;i<=n;i++){for (int j=0;j<4;j++)C[i][j]=read();v[i]=Hash(C[i][0],C[i][1],C[i][2],C[i][3]);Add(v[i],1);}for (int i=1;i<n-4;i++){Add(v[i],-1);for (int j=i+1;j<=n;j++){Add(v[j],-1);for (int k=0;k<4;k++){static ll A[4];A[0]=Hash(C[i][1],C[i][0],C[j][(k+1)%4],C[j][k %4]);A[1]=Hash(C[i][2],C[i][1],C[j][k %4],C[j][(k+3)%4]);A[2]=Hash(C[i][3],C[i][2],C[j][(k+3)%4],C[j][(k+2)%4]);A[3]=Hash(C[i][0],C[i][3],C[j][(k+2)%4],C[j][(k+1)%4]);//自己画图带入一下即可int a=0,b=0,c=0,d=0;map<ll,int>::iterator it;if ((it=Mp.find(A[0]))==Mp.end()) continue;else a=it->Se;if ((it=Mp.find(A[1]))==Mp.end()) continue;else b=it->Se;if ((it=Mp.find(A[2]))==Mp.end()) continue;else c=it->Se;if ((it=Mp.find(A[3]))==Mp.end()) continue;else d=it->Se;if (!a||!b||!c||!d) continue;ll res=1;for (int l=0;l<4;l++){res*=Mp.find(A[l])->Se;Add(A[l],-1);}Ans+=res;for (int l=0;l<4;l++) Add(A[l],1);}Add(v[j],1);}}printf("%lld\n",Ans);return 0;
}
转载于:https://www.cnblogs.com/Wolfycz/p/10072714.html
AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer相关推荐
- AtCoder Regular Contest 065
AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...
- AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和
传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...
- AtCoder Regular Contest 100 E - Or Plus Max Sos dp
传送门 文章目录 题意: 思路: 题意: 给你一个长度为2n2^n2n的数组,让你对于所有的1≤k≤2n−11\le k\le 2^n-11≤k≤2n−1求最大的ai+aj,0≤i<j≤2n−1 ...
- AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)
AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...
- NOMURA Programming Contest 2021(AtCoder Regular Contest 121)
文章目录 A - 2nd Greatest Distance B - RGB Matching C - Odd Even Sort D - 1 or 2 E - Directed Tree F - L ...
- AtCoder题解——AtCoder Regular Contest 107——B - Quadruple
题目相关 题目链接 AtCoder Regular Contest 107 B 题,https://atcoder.jp/contests/arc107/tasks/arc107_b. Problem ...
- AtCoder Regular Contest 071 D - 井井井 / ###
题目:http://arc071.contest.atcoder.jp/tasks/arc071_b 题意: 有一个二维的平面,给你xn根竖线和ym根横线,问这些线围成的长方形(正方形)的面积和(要求 ...
- AtCoder Regular Contest 058
这个应该是第一场有英文的atcoder吧??不过题解却没有英文的... 从前往后慢慢做... C こだわり者いろはちゃん / Iroha's Obsession 数据范围这么小,直接暴力 #inclu ...
- AtCoder Regular Contest 120 C - Swaps 2 线段树模拟
传送门 文章目录 题意: 思路: 题意: 给你两个序列a,ba,ba,b,每次可以执行一个操作:将a[i]a[i]a[i]与a[i+1]a[i+1]a[i+1]交换,且让交换后的a[i]+1,a[i+ ...
最新文章
- 无所不在的物联网设备 你我都需要正视所带来的安全问题
- 解析字符串,每8位将2进制转为16进制
- AM,DSB,SSB,FM信号调制matlab
- 如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持
- 苹果高管:M1芯片iPad Air是为内容创作者和学生等设计
- 2021年提升效率的7个新vue实战技巧!
- Django模糊查询
- No package ‘libmatekbd‘ found
- 软著申请合作开发协议模板
- Linux操作系统感想
- 高仿微信拍照,视频录制-----JCameraView
- 计算并返回 x 的平方根,其中 x 是非负整数。
- Android studio 编译错误:CreateProcess error=206, 文件名或扩展名太长。
- AirDisk存宝 【S3和S6后面的USB口是用来干嘛的?有什么作用?】
- 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法
- 搭建个人知识付费应用系统-(6)Sanity 集成
- Python爬虫入门教程 24-100 微医挂号网医生数据抓取
- 格式化的盘要如何恢复文件
- 操作系统【动态分区分配算法——首次适应算法、最佳适应算法、最坏适应算法、临近适应算法】
- 测试开发工程师,年薪100W不过分吧