Given the numbers N and K, print all lines of zeros and units of length N, containing exactly K units, in lexicographical order.
Input Format
Two numbers are given: N and K (0β€Kβ€N, 0β€Nβ€100)
Output format
It is necessary to print all the lines of zeros and units of length N, containing exactly K units, in lexicographical order. It is guaranteed that the response size does not exceed 10MiB.
Example
ΠΠ²ΠΎΠ΄ ΠΡΠ²ΠΎΠ΄ 4 2 0011 0101 0110 1001 1010 1100
Here is my idea (my idea passes 59 of 62 tests, 3 tests work for more than 1 second)
var kol : array[1..101] of Byte; n,k : Byte; s : String[120]; procedure vivod(sum:Byte); var i:Byte; begin Write(copy(s,1,n-(sum+k))); // Π²ΡΠ²ΠΎΠ΄ Π²Π΅Π΄ΡΡΠΈΡ
Π½ΡΠ»Π΅ΠΉ for i := 1 to k do Write('1',copy(s,1,kol[i])); //Π²ΡΠ²ΠΎΠ΄ 1 Π° ΡΠ»Π΅Π΄ΠΎΠΌ kol[i] - ΠΊΠΎΠ»-Π²ΠΎ Π½ΡΠ»Π΅ΠΉ ΠΈΠ΄ΡΡΠΈΡ
Π·Π° ΡΡΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ WriteLn; end; procedure perebor; var loc,sum,i,id,x:Byte; begin sum:=0; vivod(sum); //Π²ΡΠ²ΠΎΠ΄ Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ (000...1111) while kol[k]<nk do //ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΡΡ nk Π½ΡΠ»Π΅ΠΉ, Ρ.Π΅. Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Π΅ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΡΡΡ, Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ begin inc(sum);// ΠΊΠΎΠ»-Π²ΠΎ Π½ΡΠ»Π΅ΠΉ ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ°Π²ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½ΠΎΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ 1 Π΅Π΄ΠΈΠ½ΠΈΡΡ i := 1; fillchar(kol,n,0); //Ρ Π²ΡΠ΅Ρ
Π΄ΡΡΠ³ΠΈΡ
Π΅Π΄ΠΈΠ½ΠΈΡ ΠΊΠΎΠ»-Π²ΠΎ Π½ΡΠ»Π΅ΠΉ 0 kol[1] := sum; // ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠΎΡΡΡ sum Π½ΡΠ»Π΅ΠΉ while kol[k]<>sum do // ΠΏΠΎΠΊΠ° sum Π½ΡΠ»Π΅ΠΉ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ begin vivod(sum); //Π²ΡΠ²Π΅ΡΡΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ if i=k then // Π΅ΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ(k-ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ) begin x:=kol[k]; //Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ ΡΡΠΎΡΡΠΈΡ
ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ kol[k]:=0; //ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ Π΅Π³ΠΎ, Π²Π΅Π΄Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π½Π΅ΠΊΡΠ΄Π° while kol[i-1]=0 do dec(i); //Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΊΡΡ ΠΏΠ΅ΡΠ²ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ ΡΡΠΎΡΡ Π½ΡΠ»ΠΈ kol[i]:=x; //ΠΏΡΠΈΡΠ²Π°Π΅ΠΌ Π΅ΠΉ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° dec(i); // ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ end; {ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΡΠΌΠ΅Π½ΡΡΠ°Ρ kol Π½ΡΠ»Π΅ΠΉ Ρ i Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΠΊΠΎΠ»-Π²ΠΎ Π½ΡΠ»Π΅ΠΉ Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ} dec(kol[i]); inc(i); inc(kol[i]); end; vivod(sum); // Π²ΡΠ²ΠΎΠΆΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΡΡΠΈΠ² kol=[0,0,0,..,0,0,sum] end; end; begin Assign(input,'input.txt'); Reset(input); REadLn(n,k); {ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π²Π΅Π΄ΡΡΠΈΠ΅ Π½ΡΠ»ΠΈ ΠΈΠ»ΠΈ Π½ΡΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠΊΠ»Ρ, Π° ΡΡΠΏΠΎ copy} s:='0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; close(input); Assign(output,'output.txt'); ReWrite(output); perebor; close(output); end.