#include <iostream> #include <vector> using namespace std; long long liczby_fibonacciego[] = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920}; int main() { int ilosc_powtorzen; cin >> ilosc_powtorzen; while(ilosc_powtorzen--) { int ilosc_liczb; cin >> ilosc_liczb; long long suma1 = 0; for(int i = 0; i < ilosc_liczb; i++) { int znak; cin >> znak; if(znak == 1) suma1 += liczby_fibonacciego[i]; } cin >> ilosc_liczb; long long suma2 = 0; for(int i = 0; i < ilosc_liczb; i++) { int znak; cin >> znak; if(znak == 1) suma2 += liczby_fibonacciego[i]; } long long iloczyn = 0; iloczyn = suma1*suma2; int WzieteLiczby[59]; for(int i = 0; i < 59; i++) WzieteLiczby[i] = 0; for(int i = 58; i >= 0; i--) { if(liczby_fibonacciego[i] <= iloczyn) { //cout << liczby_fibonacciego[i] << " " << iloczyn << endl; WzieteLiczby[i] = 1; iloczyn -= liczby_fibonacciego[i]; } if(iloczyn==0) break; } //for(int i = 0; i < 58; i++) //cout << WzieteLiczby[i] << endl; int licznik = 0; for(int i = 58; i >= 0; i--) { //cout << "wziete: " << WzieteLiczby[i] << endl; if(WzieteLiczby[i] == 0) licznik++; else break; //cout << "siema" << endl; } cout << 59 - licznik << " "; for(int i = 0; i < 59-licznik; i++) cout << WzieteLiczby[i] << " "; cout << endl; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <iostream> #include <vector> using namespace std; long long liczby_fibonacciego[] = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920}; int main() { int ilosc_powtorzen; cin >> ilosc_powtorzen; while(ilosc_powtorzen--) { int ilosc_liczb; cin >> ilosc_liczb; long long suma1 = 0; for(int i = 0; i < ilosc_liczb; i++) { int znak; cin >> znak; if(znak == 1) suma1 += liczby_fibonacciego[i]; } cin >> ilosc_liczb; long long suma2 = 0; for(int i = 0; i < ilosc_liczb; i++) { int znak; cin >> znak; if(znak == 1) suma2 += liczby_fibonacciego[i]; } long long iloczyn = 0; iloczyn = suma1*suma2; int WzieteLiczby[59]; for(int i = 0; i < 59; i++) WzieteLiczby[i] = 0; for(int i = 58; i >= 0; i--) { if(liczby_fibonacciego[i] <= iloczyn) { //cout << liczby_fibonacciego[i] << " " << iloczyn << endl; WzieteLiczby[i] = 1; iloczyn -= liczby_fibonacciego[i]; } if(iloczyn==0) break; } //for(int i = 0; i < 58; i++) //cout << WzieteLiczby[i] << endl; int licznik = 0; for(int i = 58; i >= 0; i--) { //cout << "wziete: " << WzieteLiczby[i] << endl; if(WzieteLiczby[i] == 0) licznik++; else break; //cout << "siema" << endl; } cout << 59 - licznik << " "; for(int i = 0; i < 59-licznik; i++) cout << WzieteLiczby[i] << " "; cout << endl; } return 0; } |