bzoj1215
Posted 宣毅鸣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1215相关的知识,希望对你有一定的参考价值。
题解:
暴力枚举每一种方案,然后hash判重
代码:
#include<bits/stdc++.h> #define eps 1e-7 using namespace std; int v[4],r[4],hs[8000],p=0,ans=0; void add(int v1,int v2,int v3,int v4,int v5,int v6,int v7) { hs[++p]=(v1|v2<<3|v3<<6|v4<<9|v5<<12|v6<<15|v7<<18); } double f(double a,double b,int op) { if (op==0) return a+b; if (op==1) return a-b; if (op==2) return a*b; return a/b; } bool e(int a,int b) { if (a==0) return b>1; if (a==2) return b<2; return 1; } void check(int v1,int v2,int v3,int v4) { for (int i=0;i<4;i++) for (int j=0;j<4;j++) for (int k=0;k<4;k++) { bool e1=e(k,j),e2=e(j,i); if (fabs(f(f(f(v[v1],v[v2],i),v[v3],j),v[v4],k)-24)<eps) add(r[v1],r[v2],i+4,r[v3],j+4,r[v4],k+4); if (e1&&fabs(f(f(v[v1],v[v2],i),f(v[v3],v[v4],j),k)-24)<eps) add(r[v1],r[v2],i+4,r[v3],r[v4],j+4,k+4); if (e2&&fabs(f(f(v[v1],f(v[v2],v[v3],i),j),v[v4],k)-24)<eps) add(r[v1],r[v2],r[v3],i+4,j+4,r[v4],k+4); if (e1&&fabs(f(v[v1],f(f(v[v2],v[v3],i),v[v4],j),k)-24)<eps) add(r[v1],r[v2],r[v3],i+4,r[v4],j+4,k+4); if (e1&&e2&&fabs(f(v[v1],f(v[v2],f(v[v3],v[v4],i),j),k)-24) <eps) add(r[v1],r[v2],r[v3],r[v4],i+4,j+4,k+4); } } int main() { for (int i=0;i<4;i++)scanf("%d",&v[i]); for (int i=0;i<4;i++) for (int j=0;j<4;j++)r[i]+=v[i]<v[j]; for (int i=0;i<4;i++) for (int j=0;j<4;j++) if (i!=j) for (int k=0;k<4;k++) if (i!=k&&j!=k) check(i,j,k,6-i-j-k); sort(hs+1,hs+p+1); if (p) ans=1; for (int i=2;i<=p;i++) if (hs[i]!=hs[i-1]) ans++; printf("%d",ans); }
以上是关于bzoj1215的主要内容,如果未能解决你的问题,请参考以下文章
[bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)