#include <iostream> #include <vector> using namespace std; typedef long long LL; typedef long double LD; LL t[3003]; vector <LL> res; const LL mini = -9999999999999L; const LD eps = 0.000000001; int main(){ ios::sync_with_stdio(0); int n; cin>>n; for(int i=1; i<=n; i++){ cin>>t[i]; } LL maxi1 = t[1]; LL maxi2 = 1; bool ujemne=false; for(int i=2; i<=n; i++){ if(ujemne && t[i]>=0){ cout<<"NIE\n"; return 0; } if(t[i] < 0){ ujemne=true; } int tmp=0; if(t[i]%i)tmp=1; if(t[i]>=0 && (t[i] - (t[i]/i+tmp))/LD(i-1) - eps > LD(maxi1)/maxi2 ){ cout<<"NIE\n"; return 0; } if(t[i]<0 && (t[i] - (t[i]/i)) /LD(i-1) - eps > LD(maxi1)/maxi2 ){ cout<<"NIE\n"; return 0; } if(LD(maxi1)/maxi2 > LD(t[i])/i){ maxi1=t[i]; maxi2=i; } } cout<<"TAK\n"; for(int i=1; i<=n; i++){ int tmp=0; if(t[i]%i)tmp=1; LL WW = t[i]/i + tmp; LL MM = t[i]/i; if(tmp && t[i]<0){ WW = t[i]/i; MM = t[i]/i -1; } LL wieksze = t[i] - ((t[i]/i) * i); if(t[i]%i == 0) wieksze=i; LL mniejsze = i - wieksze; if(t[i]<0){ mniejsze = abs(t[i]) - (abs(t[i])/i)*i; wieksze = i - mniejsze; } if(mniejsze == 0){ for(int j=0; j<i; j++) res.push_back(WW); res.push_back(mini); continue; } if(wieksze > mniejsze){ res.push_back(WW); wieksze-=1; LL rozmiar_duzej_grupy = wieksze / mniejsze + tmp + 1; LL rozmiar_malej_grupy = rozmiar_duzej_grupy - 1; LL liczba_duzych_grup = wieksze % mniejsze; LL liczba_malych_grup = mniejsze - liczba_duzych_grup; for(int j=0; j<liczba_duzych_grup; j++){ res.push_back(MM); for(int k=0; k<rozmiar_duzej_grupy-1; k++){ res.push_back(WW); } } for(int j=0; j<liczba_malych_grup; j++){ res.push_back(MM); for(int k=0; k<rozmiar_malej_grupy-1; k++){ res.push_back(WW); } } } else{ res.push_back(WW); wieksze-=1; if(wieksze==0){ for(int j=1; j<i; j++) res.push_back(MM); res.push_back(mini); continue; } swap(mniejsze, wieksze); swap(MM, WW); LL rozmiar_duzej_grupy = wieksze / mniejsze + tmp + 1; LL rozmiar_malej_grupy = rozmiar_duzej_grupy - 1; LL liczba_duzych_grup = wieksze % mniejsze; LL liczba_malych_grup = mniejsze - liczba_duzych_grup; for(int j=0; j<liczba_duzych_grup; j++){ for(int k=0; k<rozmiar_duzej_grupy-1; k++){ res.push_back(WW); } res.push_back(MM); } for(int j=0; j<liczba_malych_grup; j++){ for(int k=0; k<rozmiar_malej_grupy-1; k++){ res.push_back(WW); } res.push_back(MM); } } res.push_back(mini); } cout<<res.size()<<"\n"; for(unsigned i=0; i<res.size(); i++){ cout<<res[i]<<" "; } 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #include <iostream> #include <vector> using namespace std; typedef long long LL; typedef long double LD; LL t[3003]; vector <LL> res; const LL mini = -9999999999999L; const LD eps = 0.000000001; int main(){ ios::sync_with_stdio(0); int n; cin>>n; for(int i=1; i<=n; i++){ cin>>t[i]; } LL maxi1 = t[1]; LL maxi2 = 1; bool ujemne=false; for(int i=2; i<=n; i++){ if(ujemne && t[i]>=0){ cout<<"NIE\n"; return 0; } if(t[i] < 0){ ujemne=true; } int tmp=0; if(t[i]%i)tmp=1; if(t[i]>=0 && (t[i] - (t[i]/i+tmp))/LD(i-1) - eps > LD(maxi1)/maxi2 ){ cout<<"NIE\n"; return 0; } if(t[i]<0 && (t[i] - (t[i]/i)) /LD(i-1) - eps > LD(maxi1)/maxi2 ){ cout<<"NIE\n"; return 0; } if(LD(maxi1)/maxi2 > LD(t[i])/i){ maxi1=t[i]; maxi2=i; } } cout<<"TAK\n"; for(int i=1; i<=n; i++){ int tmp=0; if(t[i]%i)tmp=1; LL WW = t[i]/i + tmp; LL MM = t[i]/i; if(tmp && t[i]<0){ WW = t[i]/i; MM = t[i]/i -1; } LL wieksze = t[i] - ((t[i]/i) * i); if(t[i]%i == 0) wieksze=i; LL mniejsze = i - wieksze; if(t[i]<0){ mniejsze = abs(t[i]) - (abs(t[i])/i)*i; wieksze = i - mniejsze; } if(mniejsze == 0){ for(int j=0; j<i; j++) res.push_back(WW); res.push_back(mini); continue; } if(wieksze > mniejsze){ res.push_back(WW); wieksze-=1; LL rozmiar_duzej_grupy = wieksze / mniejsze + tmp + 1; LL rozmiar_malej_grupy = rozmiar_duzej_grupy - 1; LL liczba_duzych_grup = wieksze % mniejsze; LL liczba_malych_grup = mniejsze - liczba_duzych_grup; for(int j=0; j<liczba_duzych_grup; j++){ res.push_back(MM); for(int k=0; k<rozmiar_duzej_grupy-1; k++){ res.push_back(WW); } } for(int j=0; j<liczba_malych_grup; j++){ res.push_back(MM); for(int k=0; k<rozmiar_malej_grupy-1; k++){ res.push_back(WW); } } } else{ res.push_back(WW); wieksze-=1; if(wieksze==0){ for(int j=1; j<i; j++) res.push_back(MM); res.push_back(mini); continue; } swap(mniejsze, wieksze); swap(MM, WW); LL rozmiar_duzej_grupy = wieksze / mniejsze + tmp + 1; LL rozmiar_malej_grupy = rozmiar_duzej_grupy - 1; LL liczba_duzych_grup = wieksze % mniejsze; LL liczba_malych_grup = mniejsze - liczba_duzych_grup; for(int j=0; j<liczba_duzych_grup; j++){ for(int k=0; k<rozmiar_duzej_grupy-1; k++){ res.push_back(WW); } res.push_back(MM); } for(int j=0; j<liczba_malych_grup; j++){ for(int k=0; k<rozmiar_malej_grupy-1; k++){ res.push_back(WW); } res.push_back(MM); } } res.push_back(mini); } cout<<res.size()<<"\n"; for(unsigned i=0; i<res.size(); i++){ cout<<res[i]<<" "; } return 0; } |