精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

送上今年微軟的一道筆試題

開發 開發工具
這里送上一道微軟的筆試題,大家可能會認為這是一個全排列的問題,但是全排列在問題在于不能很好的知道每個數到底排在第幾位,并且時間上肯定是不能通過的,遞歸的效率大家應該都知道。

這里送上一道微軟的筆試題,具體題目如下:

Time Limit: 10000ms

Case Time Limit: 1000ms

Memory Limit: 256MB

 

Description

Consider a string set that each of them consists of {0, 1} only. All strings in the set have the same number of 0s and 1s.

Write a program to find and output the K-th string according to the dictionary order. If s​uch a string doesn’t exist,

or the input is not valid, please output “Impossible”. For example, if we have two ‘0’s and two ‘1’s,

we will have a set with 6 different strings, {0011, 0101, 0110, 1001, 1010, 1100}, and the 4th string is 1001.

 

Input

The first line of the input file contains a single integer t (1 ≤ t ≤ 10000),

the number of test cases, followed by the input data for each test case.

Each test case is 3 integers separated by blank space: N, M(2 <= N + M <= 33 and N , M >= 0),

K(1 <= K <= 1000000000). N stands for the number of ‘0’s, M stands for the number of ‘1’s,

and K stands for the K-th of string in the set that needs to be printed as output.

 

Output

For each case, print exactly one line. If the string exists, please print it, otherwise print “Impossible”.

 

Sample In

3

2 2 2

2 2 7

4 7 47

Sample Out

0101

Impossible

01010111011

其實說了這么多,意思很簡單,就是輸入N個0,M個1.然后求出由M,N個1,0組成的第K大的數。如果不存在則輸出impossible.

初來乍到的,大家可能會認為這是一個全排列的問題,但是全排列在問題在于不能很好的知道每個數到底排在第幾位,并且時間上肯定是不能通過的,遞歸的效率大家應該都知道。

我們可能會想到另外一種解決方案,直接列舉,從最小的000...1111開始,一直列舉到1111..000然后記錄下當前是否是含N個0,M個1。這種方式是最容易理解的了,但是如果數字比較大,比如17個1,17個0,我們且不說這么大的整數不能保存,就這個時間上也不合算啊,雖然他是線性復雜度,但是這個線性數也太大了點。。。

OK,我接下來又想到了是否可以通過樹的遍歷,想了想被我否了。

終于想到了一種方式,就是通過不斷的交換獲得。我們想到,如果從一個第1大的數變成第2大的數,必然要使這個數增大,那么怎么個增大法?才能使得這兩個數是最接近的,也就是說我們只增加了1,而不是中間還存在很多數呢?

那就是從左到右掃描數據,直到遇到10就交換,并且在該1之前的1要和***位的0交換。好的思路已經完全暴露了,我這里就列舉一個例子。

比如5個1,5個0的情況。

我們保存的格式是1111100000(實際數為0000011111),它是最小的數(輸出的時候倒著輸出,這種結構主要為了理解方便)。***的數是0000011111.(記住,是倒著哈!)

當我們要增加的時候在J=5的時候,出現了0,且j=4時,它為1,這樣就交換他們,j=4之前的1和低位的0交換,這里沒有0就不需要交換了。得到1111010000(實際數為0000101111).

當我們出現0011101100(實際數為0011011100)要使數字增加1應該怎么做呢?顯然,還是J=5時出現了0且j-1=4時為1交換他們,并且j=4之前的1和***位的0開始不斷交換,***我們會得到結果:1100011100.(實際數為00111000011).

Ok,說到這里大家應該就完全懂了,且看算法源代碼:[集思廣益,你們有沒有更好的解決方案?]

  1. //M:0的個數,N,1的個數。K要輸出第幾個數。 
  2. bool test(int N,int M,int K){ 
  3.     if(calculateTotalNum(M+N,M)<K)//若實際上的數少于k,返回false,則輸出impossible 
  4.         return false
  5.     int L=M+N,count=1
  6.     bitset<MaxLength> bit; 
  7.     map<int,bitset<MaxLength>> mapStr; 
  8.     for(int i=0;i<M;i++)//初始話最小數,即0都在最左邊比如0011 
  9.         bit[i]=1
  10.     if(K==1){ 
  11.         print(bit,M+N);//輸出 
  12.         return true
  13.     } 
  14.     int j=0;//表示從低位一直搜索到高位,有沒有遇到01,有的話就不斷交換。 
  15.     while(!isLast(bit,M,N)){//沒有搜索到***一個數字 
  16.         if(j>=M+N-1
  17.             j=0;//已經搜索到***位了,這個時候就需要從0位搜索 
  18.         if(1==bit[j]&&0==bit[j+1]){ 
  19.             int right=j-1,left=0
  20.             //從J的前一個搜素,并且該之前的1全部移動到最左邊 
  21.             while(right>=0&&bit[right]==1&&left<right){ 
  22.                 bool temp=bit[right]; 
  23.                 bit[right]=bit[left]; 
  24.                 bit[left]=temp; 
  25.                 right--,left++; 
  26.             } 
  27.             bit[j]=0;//交換0,1 
  28.             bit[j+1]=1
  29.             count++;//統計是第幾個大的數了 
  30.             if(count==K){ 
  31.                 print(bit,M+N); 
  32.                 return true
  33.             } 
  34.             j=0;//重新回過頭來搜素 
  35.         } 
  36.         else 
  37.             j++; 
  38.     } 
  39.     return true
  40.  
  41. int calculateTotalNum(int N,int M){//組合問題,計算一共多少個數。C(M,N)=A(N,N)/(A(M,M)*A(N-M,N-M)) 
  42.     int result=1
  43.     for(int i=1;i<=N;i++) 
  44.         result*=i; 
  45.     for(int i=1;i<=M;i++) 
  46.         result/=i; 
  47.     for(int i=1;i<=N-M;i++) 
  48.         result/=i; 
  49.     return result; 
  50. bool isLast(bitset<MaxLength> bit,int M,int N){ 
  51.     int i=0
  52.     while(i<N&&0==bit[i]) 
  53.         i++; 
  54.     if(i==N) 
  55.         return true
  56.     else 
  57.         return false
  58. void print(bitset<MaxLength> bit,int N){// 
  59.     for(int i=N-1;i>=0;i--) 
  60.         cout<<bit[i]; 
  61.     cout<<"  "

 附上效果截圖:

 [庸男勿擾] 同學提供了一種其他的解決方式,主要是通過遞歸的判斷當前0,1組合生成的個數與K進行比較。

(保證在不減一個0時,生成的組合總數是大于K的,否則return。)

若當前0的個數減一后,生成的總數要大于K,則輸出0,同時0的個數減一,K,1的個數不變。

若當前0的個數減一后,生成的總數小于K,則輸出1,同時1的個數減一,0的個數不變,K=K-當前總數。

遞歸調用。***能得到結果。

代碼 [庸男勿擾] 已經貼出,在回答留言處!

[有一個問題是,我和庸男勿擾在計算總次數的時候都會有溢出的問題,即使用Long long也會溢出的,大家在計算階乘或者組合問題對溢出解決方案有什么好的建議可以給出嗎?] 

原文鏈接:http://www.cnblogs.com/xiaoyi115/p/3696507.html

責任編輯:林師授 來源: 博客園
相關推薦

2021-05-09 19:42:25

筆試題前端算法

2021-04-30 08:22:36

異步求和函數

2024-10-11 17:09:27

2009-06-22 13:43:00

java算法

2018-03-06 15:30:47

Java面試題

2011-05-23 11:27:32

面試題面試java

2023-02-04 18:24:10

SeataJava業務

2009-08-11 10:12:07

C#算法

2009-08-11 14:59:57

一道面試題C#算法

2012-07-03 09:38:42

前端

2022-04-08 07:52:17

CSS面試題HTML

2009-08-11 15:09:44

一道面試題C#算法

2017-11-21 12:15:27

數據庫面試題SQL

2021-01-26 13:14:14

js前端map

2021-05-31 07:55:44

smartRepeatJavaScript函數

2024-03-18 13:32:11

2023-08-01 08:10:46

內存緩存

2021-10-28 11:40:58

回文鏈表面試題數據結構

2021-03-16 05:44:26

JVM面試題運行時數據

2010-08-11 11:57:02

微軟筆試題微軟筆試題
點贊
收藏

51CTO技術棧公眾號

久久精品欧美一区二区三区不卡| 亚洲精品在线二区| 8x福利精品第一导航| 台湾无码一区二区| 欧美天堂在线视频| 日韩和欧美一区二区三区| 主播福利视频一区| 黄色性视频网站| 99re久久| 好吊成人免视频| 午夜在线视频免费观看| 天天影院图片亚洲| 国产一区二区在线观看视频| 奇米4444一区二区三区| 永久久久久久久| 国产欧美日韩视频在线| 精品国产免费一区二区三区四区 | 激情成人亚洲| 中文字幕日韩av电影| 最新版天堂资源在线| 国产精品久久久久久久久久齐齐| 亚洲福利国产精品| 在线免费观看成人| 蜜桃视频在线入口www| 国产大陆a不卡| 成人av在线网址| 亚洲国产精品无码久久久| 欧美日韩综合| 精品国产一区二区三区在线观看 | 亚洲主播在线观看| 亚洲精品自在在线观看| 欧美成人综合在线| 99久久久精品| 国产成人一区二区三区免费看| 在线观看免费视频一区| 久久精品道一区二区三区| 91精品国产91久久久久| 人妻少妇精品一区二区三区| 99精品综合| 色噜噜国产精品视频一区二区| 精品人妻互换一区二区三区| 欧美大胆视频| 亚洲国产成人精品女人久久久 | 中文字幕在线视频第一页| 99在线精品视频在线观看| 欧美激情欧美狂野欧美精品| 男女性高潮免费网站| 国产大片一区| 久久成人这里只有精品| 男女做暖暖视频| 色88久久久久高潮综合影院| 中文字幕日韩欧美| 呻吟揉丰满对白91乃国产区| 成人午夜国产| 日韩网站在线观看| 久久一级免费视频| 88国产精品视频一区二区三区| 日韩一级黄色av| 女人十八毛片嫩草av| 欧美日韩国产传媒| 中文字幕在线观看亚洲| 亚洲一级生活片| 欧美黄色精品| 国模私拍视频一区| 国产小视频在线免费观看| 亚洲欧美日韩国产综合精品二区| 日韩av片免费在线观看| 伊人久久久久久久久久久久 | freemovies性欧美| 国产精品美女久久久久aⅴ| 亚洲欧美在线网| а天堂中文在线官网| 樱花影视一区二区| 国产色一区二区三区| 蜜桃视频动漫在线播放| 欧美亚洲综合一区| 日韩成人av免费| 亚洲精品一区国产| 日韩成人在线网站| 国产日韩精品中文字无码| 欧美成人一品| 38少妇精品导航| 最近中文字幕av| 国产在线精品不卡| 国产精品一区二区免费| 国产在线视频资源| 亚洲欧洲在线观看av| 国产尤物av一区二区三区| 888av在线视频| 欧洲中文字幕精品| 欧美高清精品一区二区| 偷拍精品福利视频导航| 日韩亚洲在线观看| 日本三级欧美三级| 日本欧美久久久久免费播放网| 亚洲一区国产精品| 久久经典视频| 亚洲免费电影在线| 日韩精品视频一区二区在线观看| 欧美jizz18| 亚洲精品美女网站| 日韩在线视频免费看| 亚洲精品护士| 91精品久久久久久久久久入口| 蜜臀久久久久久999| 国产人伦精品一区二区| 国产一级大片免费看| 成人看片网站| 亚洲成人av中文字幕| 手机看片国产日韩| 亚洲综合三区| 91精品国产综合久久久久久丝袜| 久草视频视频在线播放| 夜夜操天天操亚洲| 久久这里只精品| 香蕉久久精品日日躁夜夜躁| 欧美www在线| 最近中文字幕免费在线观看| 99国产精品国产精品毛片| 伊人久久大香线蕉午夜av| 水蜜桃在线视频| 精品福利在线导航| 永久看片925tv| 麻豆国产一区二区| 久久综合色一本| 99在线视频影院| 日韩欧美综合在线| 国产极品美女在线| 欧美a级理论片| 久久综合色一本| 大桥未久在线视频| 精品国产91九色蝌蚪| 精国产品一区二区三区a片| 男女男精品网站| 久久99国产精品99久久| 日本大胆在线观看| 欧美一区二区福利视频| 国产福利在线导航| 日产国产高清一区二区三区| 蜜桃成人在线| 日本韩国欧美| 亚洲美女视频网站| 国产精品人人人人| 91麻豆高清视频| 一区二区传媒有限公司| 国产图片一区| 91精品国产91久久久久| 色猫av在线| 欧美性少妇18aaaa视频| 国产精品密蕾丝袜| 免费在线观看视频一区| 亚洲精品国产精品国自产| 78精品国产综合久久香蕉| 在线观看成人黄色| 88av在线视频| 亚洲欧美色综合| 国产精品日日摸夜夜爽| 激情五月***国产精品| 国产嫩草一区二区三区在线观看| 精品人妻一区二区三区蜜桃| 亚洲一区二区三区中文字幕| 国产在线不卡av| 国产日韩欧美在线播放不卡| 欧美日韩精品免费观看| 成人网ww555视频免费看| 色偷偷噜噜噜亚洲男人| 国产99对白在线播放| 日韩一区中文字幕| 久久久男人的天堂| 午夜亚洲精品| 色综合666| 久久wwww| 欧美专区国产专区| 91caoporm在线视频| 日韩视频一区二区在线观看| 亚洲天堂日韩av| 国产欧美1区2区3区| 日本黄色福利视频| 国产一区清纯| 日韩福利影院| 欧美一级大片在线视频| 55夜色66夜色国产精品视频| 18视频免费网址在线观看| 91精品国产免费| 黄色在线观看国产| 亚洲情趣在线观看| 99久久国产精| 国产真实乱对白精彩久久| 热99久久精品| 亚洲av片不卡无码久久| 亚洲一区二区三区久久久| 国外色69视频在线观看| 成人免费在线电影| 精品伦理精品一区| 中文字幕+乱码+中文字幕明步 | 成人免费a视频| 国产精品丝袜久久久久久app| 在线观看一区二区三区四区| 日本欧美久久久久免费播放网| 97碰在线视频| 国产精品手机在线播放| 51午夜精品| www.一区| 欧美一区二区三区……| 成人短视频在线观看| 亚洲视频在线免费观看| 成人精品在线播放| 欧美日韩三级一区二区| 国产女同在线观看| 亚洲欧美另类综合偷拍| 亚洲国产av一区| 成人精品视频一区二区三区 | 日韩一区二区福利| 四虎影视在线观看2413| 欧美sm美女调教| 国产特级黄色片| 欧美日韩一区二区三区四区| 日韩成人免费观看| 一区二区三区中文免费| 中日韩一级黄色片| 国产亚洲污的网站| 五月开心播播网| 国产91色综合久久免费分享| 精品久久久99| 美美哒免费高清在线观看视频一区二区| 日韩中文字幕在线视频观看 | 欧美美女操人视频| av免费在线一区二区三区| 亚洲国内精品在线| 欧美自拍第一页| 欧美大片国产精品| 国产人妖一区二区| 欧美乱熟臀69xxxxxx| 中文字幕一区二区久久人妻| 一本色道a无线码一区v| 亚洲午夜18毛片在线看| 欧美日韩国产丝袜另类| 亚洲激情视频一区| 图片区小说区区亚洲影院| 国产一级二级毛片| 亚洲va中文字幕| 日韩av一二三区| 亚洲电影第三页| 日韩大片免费在线观看| 午夜精品福利在线| 日韩乱码在线观看| 亚洲成av人片在线观看无码| 精品少妇theporn| 亚洲成人av一区二区三区| 国产一级生活片| 亚洲第一久久影院| 日本少妇在线观看| 精品欧美国产一区二区三区| 久久精品国产成人av| 欧美视频在线看| 波多野结衣一区二区三区四区| 在线观看网站黄不卡| 中文字幕自拍偷拍| 在线不卡中文字幕| 国产黄色高清视频| 日韩av影视在线| 高清美女视频一区| 久久九九国产精品怡红院 | 亚洲一区二区美女| 黄色激情视频在线观看| 狠狠色狠色综合曰曰| 欧美男人天堂网| 欧美电影影音先锋| 黄色a在线观看| 亚洲视频第一页| 免费黄色在线网站| 久久久这里只有精品视频| 亚洲天堂av在线| 国产一区二区丝袜| aaa国产精品视频| 欧美成人在线免费观看| 欧美精品一区二区三区中文字幕 | 午夜av在线播放| 2019最新中文字幕| 久久女人天堂| 国产精品免费一区二区三区在线观看 | 在线观看一区| 激情视频综合网| 国产在线播精品第三| 久久久久9999| 中文字幕一区二区三区在线不卡| 强乱中文字幕av一区乱码| 午夜av一区二区| 中文字幕视频二区| 亚洲高清一区二| 欧美三级黄网| 欧洲精品毛片网站| 精品中文视频| 欧美一二三四五区| 欧美激情偷拍| 色诱视频在线观看| 成人深夜视频在线观看| 国产黄色录像视频| 精品久久久久久久久久ntr影视 | 激情亚洲综合在线| a视频免费观看| 亚洲欧美电影院| 亚洲成人av影片| 精品福利视频一区二区三区| av二区在线| 97碰碰碰免费色视频| 国产精品亚洲一区二区在线观看| 欧美国产综合视频| 国模一区二区三区| 久久久久久久久久一区二区| 26uuu亚洲综合色欧美| 2018天天弄| 欧美日本在线播放| 青春有你2免费观看完整版在线播放高清| 久久国产精品首页| 国产综合色激情| 日本欧洲国产一区二区| 亚洲裸体俱乐部裸体舞表演av| 8x8x成人免费视频| 日本一区二区三区高清不卡| 亚洲第一精品在线观看| 精品日韩成人av| 日韩免费影院| 亚洲自拍偷拍在线| 91精品国产成人观看| 中文字幕第88页| 欧美国产禁国产网站cc| 青青艹在线观看| 国产一区二区久久精品| 成人香蕉视频| 牛人盗摄一区二区三区视频| 亚洲一区不卡| a视频免费观看| 日韩欧美在线一区| 男人天堂综合| 国产成人精品久久久| 蜜臀av免费一区二区三区| 欧美a v在线播放| xfplay精品久久| 亚洲乱码国产乱码精品| 亚洲欧美中文字幕| 成人美女黄网站| 免费看成人av| 日韩电影在线观看网站| 538精品视频| 欧美精品粉嫩高潮一区二区| 免费黄网在线观看| 7777精品伊久久久大香线蕉语言| 你懂的国产精品| 中国黄色片视频| 舔着乳尖日韩一区| 韩国中文免费在线视频| 国产精品稀缺呦系列在线| 天天插综合网| 国产精品嫩草69影院| 亚洲高清视频中文字幕| 亚洲色图另类小说| 日本亚洲欧洲色| 欧美一区二区三区激情视频| www.se五月| 一区二区欧美精品| 香港三日本三级少妇66| 国产99久久久欧美黑人| 日韩极品一区| 性生活在线视频| 香港成人在线视频| 日本成人一区二区三区| 国产精品综合不卡av| 中文字幕一区二区三区乱码图片 | 91在线一区| aⅴ在线免费观看| 国产欧美精品一区二区三区四区| 国产免费不卡av| 97久久精品在线| 精品国产123区| 无套白嫩进入乌克兰美女| 精品久久久国产精品999| 日本网站在线免费观看视频| 国产69精品久久久久9999apgf| 久久久久久黄| 欧美日韩在线视频免费播放| 日韩精品视频免费专区在线播放| 三级成人在线| 国产精品无码免费专区午夜| 2021国产精品久久精品| 国产免费黄色片| 日本精品久久中文字幕佐佐木| 日韩三级在线| 手机在线成人av| 欧美日韩国产美| 98色花堂精品视频在线观看 | 激情欧美国产欧美| 精品人妻一区二区三区四区| 日韩精品一区二区三区视频在线观看| 激情aⅴ欧美一区二区欲海潮| 亚洲一区二三| wwwwww.欧美系列| 国产普通话bbwbbwbbw| 国产激情久久久| 亚洲国产高清视频|