题目传送门: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相关推荐

  1. AtCoder Regular Contest 065

    AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...

  2. AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...

  3. 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 ...

  4. AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)

    AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...

  5. 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 ...

  6. AtCoder题解——AtCoder Regular Contest 107——B - Quadruple

    题目相关 题目链接 AtCoder Regular Contest 107 B 题,https://atcoder.jp/contests/arc107/tasks/arc107_b. Problem ...

  7. AtCoder Regular Contest 071 D - 井井井 / ###

    题目:http://arc071.contest.atcoder.jp/tasks/arc071_b 题意: 有一个二维的平面,给你xn根竖线和ym根横线,问这些线围成的长方形(正方形)的面积和(要求 ...

  8. AtCoder Regular Contest 058

    这个应该是第一场有英文的atcoder吧??不过题解却没有英文的... 从前往后慢慢做... C こだわり者いろはちゃん / Iroha's Obsession 数据范围这么小,直接暴力 #inclu ...

  9. 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+ ...

最新文章

  1. 无所不在的物联网设备 你我都需要正视所带来的安全问题
  2. 解析字符串,每8位将2进制转为16进制
  3. AM,DSB,SSB,FM信号调制matlab
  4. 如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持
  5. 苹果高管:M1芯片iPad Air是为内容创作者和学生等设计
  6. 2021年提升效率的7个新vue实战技巧!
  7. Django模糊查询
  8. No package ‘libmatekbd‘ found
  9. 软著申请合作开发协议模板
  10. Linux操作系统感想
  11. 高仿微信拍照,视频录制-----JCameraView
  12. 计算并返回 x 的平方根,其中 x 是非负整数。
  13. Android studio 编译错误:CreateProcess error=206, 文件名或扩展名太长。
  14. AirDisk存宝 【S3和S6后面的USB口是用来干嘛的?有什么作用?】
  15. 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法
  16. 搭建个人知识付费应用系统-(6)Sanity 集成
  17. Python爬虫入门教程 24-100 微医挂号网医生数据抓取
  18. 格式化的盘要如何恢复文件
  19. 操作系统【动态分区分配算法——首次适应算法、最佳适应算法、最坏适应算法、临近适应算法】
  20. 测试开发工程师,年薪100W不过分吧

热门文章

  1. 3月19日 打卡
  2. 2013年展望:大数据发展十大趋势分析
  3. 友友企业地图(Enterprise MAP)
  4. shell-----函数库调用
  5. cisco 2911 GRE ***
  6. Java_StringBuffer类
  7. ARIA and the value of challenge-led innovation
  8. 简单,为什么要复杂和妥协?
  9. C# 2018.9.17
  10. 页面从输入 URL 到页面加载显示完成