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 鏁板瓧娓告垙的主要内容,如果未能解决你的问题,请参考以下文章
2020骞?鏈堜唤Unity3D娓告垙婧愮爜鍚堥泦-鍏嶈垂涓嬭浇