码迷,mamicode.com
首页 > 其他好文 > 详细

TC-572-D1L2 未完!待续!

时间:2019-01-23 23:23:34      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:格式   com   bre   ++   ace   tps   分享图片   forward   --   

题目描述


? 有一个神秘的常数 K ,s 位
? 现在有 n 个 s 位数,告诉你每个数与 K 有多少位是相同的
? 判断 K 的无解、多解、唯一解,并求出唯一解(如果存在的话)
? 所有出现的数都允许前导零
? s ≤ 9, n ≤ 50


输入格式
第一行两个数 n, s 。
接下来 n 行,每行两个数 a, b 表示 s 位数 a 与 K 有 b 位是相同的。


输出格式
无解输出 Liar , 多解输出 Ambiguity ,唯一解则输出唯一解。

      

cute gql教我的70分做法:

  从低位搜到高位(倒过来也可以啊) 边搜边判断  然后 没了

      这样子做的代码也敲一下了啦 (其实应该比70还多)

 

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #define go(i,u,v) for(register int i=u;i<=v;i++)
 4 #define goo(i,u,v) for(register int i=u;i>=v;i--)
 5 using namespace std;
 6 int read()
 7 {
 8   int x=0,y=1;char c=getchar();
 9   while(c<0||c>9) {if(c==-) y=-1;c=getchar();}
10   while(c>=0&&c<=9) {x=(x<<3)+(x<<1)+c-0;c=getchar();}
11   return x*y;
12 }
13 int n,m,a[60],b[60],c[60][10],ans,d[60],now[10],as[60];
14 bool ck() {go(i,1,n) if(d[i]!=b[i]) return 0; return 1;}
15 void dfs(int nw)
16 {
17   if(nw>m) {if(ck()) {ans++;go(i,1,m) as[i]=now[i];}return ;}
18   go(i,0,9) {
19     bool fg=1;
20     go(j,1,n) { if(c[j][nw]==i&&d[j]+1>b[j]) {fg=0;break ;} }
21     if(!fg) continue ;
22     go(j,1,n) { if(c[j][nw]==i) d[j]++; }
23     now[nw]=i;dfs(nw+1);
24     go(j,1,n) { if(c[j][nw]==i) d[j]--; }
25   }
26 } 
27 int main()
28 {
29   n=read();m=read();
30   go(i,1,n) a[i]=read(),b[i]=read();
31   go(i,1,n) go(j,1,m) {c[i][j]=a[i]%10;a[i]/=10;}
32   dfs(1);
33   if(!ans) puts("Liar");
34   else if(ans>1) puts("Ambiguity");
35   else { goo(i,m,1) printf("%d",as[i]);}
36   return 0;
37 }
View Code

 

正解:

  很像 方程的解数

  都是直接搜索会TLE 于是就对半 分开搜索 然后来匹配

 

  代码 ……还没有写出来qwq

TC-572-D1L2 未完!待续!

标签:格式   com   bre   ++   ace   tps   分享图片   forward   --   

原文地址:https://www.cnblogs.com/forward777/p/10311291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!