acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
登录
注册
题目详情提交记录(0)
  • 题解

    userId_undefined

    法兰西玫瑰

    56阅读
    0回复
    4点赞
  • 【正经题解】虫食算

    111 . DFSDFSDFS 深搜 222 .可行性剪枝、优化 333 .要注意枚举顺序

    userId_undefined

    AC君

    管理员倔强青铜
    38阅读
    1回复
    1点赞
  • 好好好

    userId_undefined

    bianhl

    时空双修者出道萌新进制转换师荣耀黄金分治·分治练习生题解仙人
    3阅读
    0回复
    2点赞
  • 题解

    #include <bits/stdc++.h> #define for0(i,n) for(i=0;i<(n);i++) #define for1(i,n) for(i=1;i<=(n);i++) using namespace std; const int N=30; int n,num[3][N],t[N]; __int128 a[N],p[N]; bitset<N> u; char s[N]; void sov(int h){ int i; scanf("%s",s); for0(i,n) num[h][i]=s[n-1-i]-'A'; } bool f(int l){ int i,w,x,y,z; for(i=l;i<n;i++){ x=t[num[0][i]];y=t[num[1][i]];z=t[num[2][i]]; if(x&&y&&~z){ w=x+y-z; if(w&&w!=n&&w!=-1&&w!=n-1) return 0; } } if(l==n) return a[0]+a[1]==a[2]; return a[0]+a[1]a[2]||a[0]+a[1]a[2]+p[l]; } void dfs(int h,int l){ if(h3) h=0,l++; if(!h&&!f(l)) return ; int i; if(ln){ for0(i,n) printf("%d ",t[i]); exit(0); } int &x=t[num[h][l]]; if(~x) a[h]+=p[l]*x,dfs(h+1,l),a[h]-=p[l]*x; else for(i=n-1;i>=0;i--){ if(u[i]) continue; x=i;u[i]=1;a[h]+=p[l]*i; dfs(h+1,l); x=-1;u[i]=0;a[h]-=p[l]*i; } } int main(){ scanf("%d",&n); int i; for0(i,3) sov(i); p[0]=1; for1(i,n) p[i]=p[i-1]*n; memset(t,-1,sizeof(t)); dfs(0,0); printf("NO ANSWER!\n"); return 0; }

    userId_undefined

    平湖信息学社团

    7阅读
    0回复
    1点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页