CoFun 1616 鏁板瓧娓告垙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoFun 1616 鏁板瓧娓告垙相关的知识,希望对你有一定的参考价值。

鏍囩锛?/p>

Description

涓€涓暟x鍙互鎸変互涓嬭鍒欑敓鎴愭暟瀛楋細

1銆佸皢浠绘剰涓や綅浜ゆ崲锛岃嫢浜ゆ崲鐨勬暟瀛椾负a鍜宐锛岀敓鎴愮殑浠d环涓?(a and b)+(a xor b))*2 銆?銆€銆€

渚嬪134鍙互鐢熸垚431锛屽洜涓?31鍙互浠?34鐨勪釜浣嶏紙4锛変笌鐧句綅锛?锛変氦鎹㈠悗寰楀埌锛屼唬浠蜂负((1 and 4)+(1 xor 4))*2=10銆?/p>

2銆佸皢鍏朵腑涓€浣嶆暟鍒犻櫎锛屼絾鏄垹闄ょ殑鏁拌婊¤冻澶х瓑浜庡畠宸﹁竟鐨勬暟锛屼笖灏忕瓑浜庡畠鍙宠竟鐨勬暟锛屽苟涓斿畾涔夋渶楂樹綅宸﹁竟鐨勬暟涓轰釜浣嶏紝涓綅鍙宠竟鐨勬暟涓烘渶楂樹綅銆傝嫢鍒犻櫎鐨勬暟瀛椾负a锛屽畠宸﹁竟鐨勬暟涓篵锛屽畠鍙宠竟鐨勬暟涓篶锛屽垯鐢熸垚鐨勪唬浠蜂负a+(b and c)+(b xor c)銆?/p>

銆€銆€渚嬪212锛屽彲浠ュ垹闄や釜浣嶇殑鏁板緱鍒?1锛屼絾鏄洜涓?>1锛屾墍浠?鏄笉鑳借鍒犻櫎鐨勩€傜壒鍒湴锛岃嫢x涓轰袱浣嶆暟锛屽畠鑳藉垹闄ゅ綋涓斾粎褰搙鐨勪袱浣嶆暟鐩稿悓锛岃嫢x涓轰竴浣嶆暟锛屽畠鏄笉鑳借鍒犻櫎鐨勩€?/p>

3銆佸湪涓や綅鏁板瓧涔嬮棿锛屼篃鍙互鏄暟瀛楃殑鍓嶉潰鎴栧悗闈㈠姞鍏ヤ竴浣嶆暟锛屽悓鏍峰湴锛屽姞鍏ョ殑鏁拌婊¤冻澶х瓑浜庡畠宸﹁竟鐨勬暟锛屼笖灏忕瓑浜庡畠鍙宠竟鐨勬暟锛屽苟涓斿畾涔夋渶楂樹綅宸﹁竟鐨勬暟涓轰釜浣嶏紝涓綅鍙宠竟鐨勬暟涓烘渶楂樹綅銆傝嫢鍔犲叆鐨勬暟瀛椾负a锛屽畠宸﹁竟鐨勬暟涓篵锛屽畠鍙宠竟鐨勬暟涓篶锛屽垯鐢熸垚鐨勪唬浠蜂负a+(b and c)+(b xor c)銆?銆€銆€

渚嬪241锛屽畠鍙互鍦?涓?涔嬮棿鍔犲叆涓€涓?锛岀敓鎴?341锛屼篃鍙互鍦ㄦ暟鐨勬湯灏惧姞鍏ヤ竴涓?鎴栬€?锛屽綋鐒惰繕鏈夊叾瀹冨彲浠ョ敓鎴愮殑鏁帮紝浣嗘槸涓嶈兘鍦?鍜?涔嬮棿鍔犲叆鏁板瓧銆?/p>

浣犵殑浠诲姟鏄紝S涓€寮€濮嬩负n涓笉鍚岀殑缁欏畾鏁扮粍鎴愮殑闆嗗悎锛屾瘡娆″彲浠ヤ粠S涓彇鍑轰竴涓暟鐢熸垚涓€涓弧瓒崇敓鎴愯鍒欑殑鏁板姞鍏涓紝骞朵笖鍙栧嚭鐨勬暟浠嶇劧瀛樺湪浜嶴涓€傜敓鎴愮殑鏁扮殑浣嶆暟涓嶈兘澶т簬S鍒濆闆嗗悎鏈€澶х殑鏁扮殑浣嶆暟銆傞棶鍦⊿鍏冪礌鏈€澶氱殑鎯呭喌涓嬶紝鎬讳唬浠锋渶灏忔槸澶氬皯銆?/p>

Input Format

杈撳叆鐨勭1琛屼负涓€涓鏁存暟n锛屼负闆嗗悎S鍒濆鍏冪礌涓暟銆?/p>

绗?琛屽寘鍚玭涓鏁存暟a1,a2, ..., an锛屾暟涔嬮棿绌烘牸闅斿紑锛屼负S涓垵濮嬪厓绱犮€?/p>

Output Format

杈撳嚭鍖呮嫭涓€涓鏁存暟锛屼负鏈€灏忎唬浠枫€?/p>

 

鎬濊矾:濡傛灉a鑳界敓鎴恇锛岄偅涔坆涔熷彲浠ョ敓鎴恆锛岄鍏堟垜浠粠n涓暟閲岄潰bfs鍘荤敓鎴愬叾浠栨暟瀛楋紝灏嗕唬浠峰缓涓鸿竟锛岀敱浜庤姹傛渶灏忕殑鐢熸垚鎵€鏈夋暟鐨勪唬浠凤紝鍥犳寰堝鏄撴兂鍒版渶灏忕敓鎴愭爲锛屽缓涓€涓?鑺傜偣锛屽鍒濆n涓暟瀛楀缓杈癸紝杈规潈涓?锛屽仛鏈€灏忕敓鎴愭爲鍗冲彲銆?/p>

  1 #include<algorithm>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<cstring>
  5 #include<iostream>
  6 #define ll long long
  7 struct edge{
  8     int u,v,w;
  9 }e[200005];
 10 int vis[1000005],c[1000005],b[1000005],n,tot,fa[200005],mx,h,t;
 11 bool cmp(edge a,edge b){
 12     return a.w<b.w;
 13 }
 14 int find(int x){
 15     if (fa[x]==x) return x;
 16     else return (fa[x]=find(fa[x]));
 17 }
 18 void MST(){
 19     for (int i=1;i<=n;i++){
 20         e[++tot].u=0;
 21         e[++tot].v=c[i];
 22         e[++tot].w=0;
 23     }
 24     std::sort(e+1,e+1+tot,cmp);
 25     for (int i=0;i<=100000;i++) fa[i]=i;
 26     ll ans=0;
 27     for (int i=1;i<=tot;i++){
 28         int p=find(e[i].u),q=find(e[i].v);
 29         if (p==q) continue;
 30         fa[p]=q;
 31         ans+=(ll)e[i].w;
 32     }
 33     printf("%lld\n",ans);
 34 }
 35 int query(int x){
 36     int cnt=0;
 37     while (x){
 38         x/=10;cnt++;
 39     }
 40     return cnt;
 41 }
 42 void work(int x){
 43     int T=0,Len=0,y=x;
 44     while (y){
 45        b[Len++]=y%10;
 46        y/=10;
 47     }
 48     
 49     for (int i=0;i<Len;i++)
 50      for (int j=i+1;j<Len;j++){
 51             std::swap(b[i],b[j]);
 52             int cost=((b[i]&b[j])+(b[i]^b[j]))*2;
 53             T=0;
 54             for (int k=Len-1;k>=0;k--)
 55              T=T*10+b[k];
 56             if (T==x||query(T)>mx) continue; 
 57             if (!vis[T]) vis[T]=1,c[++t]=T; 
 58             e[++tot].u=x;e[tot].v=T;e[tot].w=cost;
 59             std::swap(b[i],b[j]);
 60     }
 61     if (Len>2){
 62      for (int i=0;i<Len;i++){
 63         int L=b[(i+1)%Len],R=b[(i-1+Len)%Len];
 64         if (b[i]<L||b[i]>R) continue;
 65         int cost=b[i]+(L^R)+(L&R);
 66         T=0;
 67         for (int j=Len-1;j>=0;j--)
 68          if (j!=i)
 69           T=T*10+b[j];
 70         if (query(T)>mx) continue;  
 71         e[++tot].u=x,e[tot].v=T,e[tot].w=cost;
 72         if (!vis[T]) vis[T]=1,c[++t]=T;  
 73      }
 74     }else
 75     if (Len==2){
 76         if (b[0]==b[1]){
 77             T=b[0];
 78             if (query(T)<=mx){
 79                if (!vis[T]) vis[T]=1,c[++t]=T;
 80                int cost=b[0]+(b[0]^b[1])+(b[0]&b[1]);
 81                e[++tot].u=x;e[tot].v=T;e[tot].w=cost;
 82             }
 83         }
 84     }
 85     for (int i=0;i<Len;i++){
 86         int L=b[(i+1)%Len],R=b[(i+Len)%Len];
 87         for (int j=L;j<=R;j++){
 88             T=0;
 89             for (int k=Len-1;k>=0;k--)
 90              if (k==i)
 91               T=T*10+j,T=T*10+b[k];
 92              else 
 93               T=T*10+b[k];
 94             if (query(T)>mx) break;
 95             if (!vis[T]) vis[T]=1,c[++t]=T;
 96             int cost=T+(L^R)+(L&R);
 97             e[++tot].u=x;e[tot].v=T;e[tot].w=cost; 
 98         }
 99     }
100     int L=b[0],R=b[Len-1];
101     for (int j=L;j<=R;j++){
102         T=0;
103         for (int k=Len-1;k>=0;k--)
104          T=T*10+b[k];
105         T=T*10+j;
106         if (query(T)>mx) break;
107         if (!vis[T]) vis[T]=1,c[++t]=T;
108         int cost=T+(L^R)+(L&R);
109         e[++tot].u=x;e[tot].v=T;e[tot].w=cost; 
110     }
111 }
112 int main(){
113     scanf("%d",&n);
114     for (int i=1;i<=n;i++){
115         scanf("%d",&c[i]);
116         int T=c[i],cnt=0;
117         while (T){
118             cnt++;T/=10;
119         }
120         mx=std::max(mx,cnt);
121         vis[c[i]]=1;
122     }
123     h=1,t=n;
124     while (h<=t){
125         int now=c[h++];
126         work(now);
127     }
128     for (int i=1;i<=t;i++)
129      printf("%d\n",c[i]);
130     MST();
131 }

 

以上是关于CoFun 1616 鏁板瓧娓告垙的主要内容,如果未能解决你的问题,请参考以下文章

鍒嗗竷寮忓瓨鍌↖PFS鏁板瓧璧勪骇

2020骞?鏈堜唤Unity3D娓告垙婧愮爜鍚堥泦-鍏嶈垂涓嬭浇

銆愭妧鏈垎浜€戞煇娓告垙xLua鍒嗘瀽

order by鍚庡姞鏁板瓧

[WebSocket]浣跨敤WebSocket瀹炵幇瀹炴椂澶氫汉绛旈瀵规垬娓告垙

mysql灏嗗瓧绗︿覆杞垚鏁板瓧