From 5bffc57bd66e75c3a6c36a78b021f09a7567b135 Mon Sep 17 00:00:00 2001 From: giarf Date: Mon, 30 Mar 2026 21:45:30 -0300 Subject: [PATCH] update2 --- T1/suma.c | 75 +++++++++++++++------------------------------ T1/suma.manual.bin | Bin 34256 -> 0 bytes 2 files changed, 24 insertions(+), 51 deletions(-) delete mode 100755 T1/suma.manual.bin diff --git a/T1/suma.c b/T1/suma.c index 2aa75e8..806942b 100644 --- a/T1/suma.c +++ b/T1/suma.c @@ -1,125 +1,98 @@ #include #include #include "suma.h" - // Defina aca las estructuras que necesite - -enum { NTHREADS = 8 }; - +enum {NTHREADS= 8}; +typedef long long ll; typedef struct { int *a; - long long *prefix; + ll *prefix; int n; Set inicio; Set fin; Set encontrado; } ArgsBuscar; - static Set total_combinaciones(int n) { - if (n >= (int)(sizeof(Set) * CHAR_BIT)) + if (n >= (int)(sizeof(Set) *CHAR_BIT)) return ~(Set)0; - return ((Set)1 << n) - 1; + return ((Set)1 << n)-1; } - -static long long suma_subconjunto(int a[], int n, Set k) { - long long suma = 0; - - for (int i = 0; i < n; i++) { +static ll suma_subconjunto(int a[], int n, Set k) { + ll suma=0; + for (int i=0; i>= 1; } - return cant; } - -static Set buscar_rango(int a[], long long prefix[], int n, Set inicio, Set fin) { +static Set buscar_rango(int a[], ll prefix[], int n, Set inicio, Set fin) { if (inicio == 0 || inicio > fin) return 0; - Set k = inicio; - long long suma = suma_subconjunto(a, n, k); - + ll suma = suma_subconjunto(a, n, k); while (1) { if (suma == 0) return k; - if (k == fin) break; - int cambios = contar_unos_finales(k); suma -= prefix[cambios]; suma += a[cambios]; k++; } - return 0; } - // Defina aca la funcion que ejecutaran los threads - static void *thread_buscar(void *ptr) { ArgsBuscar *args = ptr; - args->encontrado = buscar_rango(args->a, args->prefix, args->n, args->inicio, args->fin); return NULL; } - // Reprograme aca la funcion buscar -Set buscar(int a[], int n) { - Set comb = total_combinaciones(n); - Set base = comb / NTHREADS; - Set extra = comb % NTHREADS; - Set siguiente = 1; +Set buscar(int a[],int n) { + Set comb= total_combinaciones(n); + Set base= comb / NTHREADS; + Set extra =comb % NTHREADS; + Set siguiente =1; pthread_t tids[NTHREADS]; ArgsBuscar args[NTHREADS]; - long long prefix[CHAR_BIT * sizeof(Set) + 1]; + ll prefix[CHAR_BIT * sizeof(Set) + 1]; int creados = 0; - prefix[0] = 0; for (int i = 0; i < n; i++) prefix[i + 1] = prefix[i] + a[i]; - for (int t = 0; t < NTHREADS; t++) { Set largo = base + (Set)(t < (int)extra); - args[t].a = a; args[t].prefix = prefix; args[t].n = n; args[t].inicio = siguiente; args[t].fin = (largo == 0) ? siguiente - 1 : siguiente + largo - 1; args[t].encontrado = 0; - if (largo != 0) - siguiente = args[t].fin + 1; - + siguiente =args[t].fin + 1; if (pthread_create(&tids[t], NULL, thread_buscar, &args[t]) != 0) { for (int i = 0; i < creados; i++) pthread_join(tids[i], NULL); return buscar_rango(a, prefix, n, 1, comb); } - creados++; } - - Set mejor = 0; - for (int t = 0; t < NTHREADS; t++) { + Set mejor=0; + for (int t=0; t&1 z`xdPhY~txZ?aaM1SMQ$t*l6z@pGT$)Qz#a>hN=d%%>hnD zL!!Q=sLc9WF(?i!^SEw=BnsU~BcZDPK(N|>BP&tg>FlV!&1MajmX2+RtArciJQDCH*KS{qznu&`sK9&(m zFh16kA3w>Ex!%=RQt!IBFzke{Q(ueJOmkP6`jJmhhEt$>EPzCWS}0C5J~VBt7y<%9)R3sq15z zx+YWT&Bz2A!Fcvtlbs`0$vJXNE*SnymS$Qh^ptJd*^Y(RsCmlI+um-ARGe*1b3Qe2 zl*0E@sB$yn#eZ~$7s|FlYjJCbEjd(qsfG0Evuw{|?Tq-X)El-~_mn2nnT16()F!ue zbfwUlB8i4dvv+p{?~=khvuK3nQz>m7$673BC}Z*-2{wV<{zb}E-6B)_r?4}WO!Eec zoV`WK)I3X~Do$UKtutRj8|M?wVQzEPLha{MXlPd?QuT5Yoh*fY@Gpl7{g+ZZ3l>UK z1_yHv6}&I+ELZlU{krcg6FuS$b1J0jMQV?#3OJLR;&{?SO) z?Baj#*c(Zmzjy18dLBf(kw|0`>Q!FCRn4I0D{^bc0}{=ffOc#j?pxUdMbvwcXdc|e zkq4cVB)WfLAq|zJl78`EXTiln>K&1-T}9Jq=*TCLs)0ghZ;6HG=b$dv9{^9sF49k7 zoQK!@jdAv2oUQ+`X!u{j(hjz&WE;%8_n8j=ov_s+4gLIjr0SUb=rDX}e<|j)6mz;z zvJRGGZ2fXx7v^6d-L?ciu^7Hl0UuceUnvh?^Zw#kpRArg0R7gx%EK|;{~}YBotz_S zR%dUc$@Bu4{s~Nr(D#QqPZnI3_Z1+od2e=WhgHhj^CvJ}!Avn<%ya_Al8MMnKV+uT z1cPZ-@f#ic!F1J@=X-vIcFYv@45skEH?jU47r=Hv-rHe?uVC4|$u>q>=*;Lg3I0ra zzf3yMe>3bJke$63(?Y%LUuvs-F#UVJ(j7COojJPmZ0YE_1ErEZ&Aua4X)U%FE(4nq ziF!x3m4~5A|2&=F{*pSux|bx|*W>k;B+*05Fs71euNS~49SIRW_bb|f+lR68qMjW%D19EdcxF08a z!0=bh$ujsW^XrFi@z{>YbTU#Qof%do%((?~FJnKzo*+xQ3LDZe$FV(O656rv4a=69 z*sD*Ry3?k!U7x0qUL;Q%?1R1aGk(+23cFgjZt5A3X{2Ay?Q*bRZhf)mJl6atm`7|* zC+Kjd4nqy!&y(n+vCr6?BLttkf_B)-PE4C?)2~U??vz56quUn4whGv|2!4sV!G4vB z_Pl2e&dO=LINi~B&6^8<%|rPl)XPWx$rwvPc(f%&AGeRSei+0hF zgmvctw{u|4{BjXrgx(zV>o*xJXe?4;WBkZ3=O;skdwP5sl59gIi=gsb#kJ<%V-m-+=zAmO|1J#SmzI8jpv6BSB|t;bYl(*()6oX z5B*s0ykBT&GcX5lp1_6ck8q{3qs>Sf>Hdw~s+89&Ht(;fATwBmp3*n>4N zYg<=Osg!1{&4s34gkydo&nIk>iP%+|u& zv}IeZu$83hsrJchr}BPqDV0Xq?g?n?oaUao8|$b&g|a&*QnTx`NEKh-EuboEI)ggzwCGtzVMAL$9pzN8HO+HgfHYs2ReRq!xwCZFYvuRX3MLeYs<~|EasdC&b)^6 zp@aA75%{trZVl(-xuR%ObbqOz@s_c_lx*8zLgu~OV4I(&KLgoFJ9G3-q+?@y66srW9vd64)7V;LUp)fA)8ZI>Ck@Xm=DcnBGxV{pm_PPes;5fuNy>K_KG_eSgq{0oUb^m%+Pt5h%h7$Y zbbhXm&!FwcTGkBP@bM)6+3ARls_^WA`_rSi-#mi*&Klf*zJ>eHH}Tx`aQNc%s>Z=t zs~h>*ito3)mfn#aU5hZDY1o6|yO*uzeJ`?_!np74pSIYpDpe~NoA_JGTNyK`i%1<&+YV{K@2ak{BzAYE6`z6NCm zkCPe3y1x^3@HxZKkNZB)>3%w#tItH5=Z44gJ&flA%#Ts_ajri7Mp=$g_TMOD`|zO$ z+dH-6Gt1>H?#EJe-biQ0r6Ec?2mNY2-U^Tw4 zSReERyht~?l;Vbl+S!W7tIW02a+l)wHUw+jUXN0%Rl89|^NrQus&-lwtV3ag(&Y25 z)BIjvnbL6UW>K}#MpbUDv5D2y1T{~M+tsi@fkBP#2De|U3wmn3{?F|_UQKn-U*qyA zO^5+QW4xLpeNSAsDmbz z+C~_}140+B2Cc!p)x|XC*eRg-1IoRM3&XB<)q2ZrH2v#nZ}DK!g|^v^&$Lu!v?^0T zURw_Y4PJwt<_R)|T5qD-XoLI8l!sY|*`m?qSL%E&4+es{Q#=dqn~$NoVZAw7RN-o< z2{xbx8hK*2dzE^ZKj2dCS2k)jnxE`w~GR_FC`Ys}u)FqJj#fH9exACnhU0xqBCQr7WAcs(v!9dmrQr^f5^X*B^? z8C=L*1Z9NJVUbb9>xlf75B3^rz93P$ClYzGI*E2X9f^GOY9{^mxk%*hJ2L6)zDVS6 z@nNRPL-b=jjOhm>kvk%nBQGqs(<69*_~bRoxb9q!?}jQQ`u5Ru`u%UaBhRjY8|smW ziknDhPco^{5#MiopDk#6yFUMuCeRo4IekVY-KtOiN@WTnUll|S3S#s-9I`A0gvF3K z@^`KrI2|AOyP|Y_^LH2FZV6RRH14;MWiJY{l1M(CL`g+t6ei(2uB0M4S}|USNDBgj zfFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|( z2nYg#fFK|U2m*qDAn^Z_KvsxuD_J&vS&1wECY9wB^UD7-%rgH@ zm9O~yzHzmiSN=a^gpl!9{1F5M0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e z0YN|z5CjAPK|l}?1Ox#=KoAfF1cBQUP*7tPVhEAX(~iCi011TX|NTePe8zSx7-=Wo z2H=e4MB7Ptfq*mvaXDf&BF?9hLWuhjabT|WGUD$LaZ;>gM^CD%;uNu(4QfsO26dgw z-7r3rMzd-)pRb8j9DNobbzPGWN3N|yVw2B}lhD*UEf8=wYTk9Vt}Ud-N}B@p zIEJfMt-)We6_eL{-5yB6Kux{NXC(aQI3$%8a*|(!Ak(>Q{CV9jt=5_;L#At45Dz)< z=dFpT;)0TCUVp#`9W!J)h6DGK)y8_5h=b??np%&pH6Pic=gQGU*jNP{X-Xr_@@alk zD&y{6xA!F-ma5h~F7+As&m%7rsaCvbfivD?nP0jPipp%>1PL7?aCsgg&i*7mH;d(| zrhE=BXkfY2l((BQpTExa`8;(l|B5NE!HXPNE;r>8vp%Mi^SQ_fe}}*Ea&v;bJwbjf zLEe)fA4rgoB*@_exi>+6EkQn=AoKev*tatf`ONwWh)j=<7Q<8$&Tk}~>q%UX-(kV; zulRH7EAY*mXIwRB+`O{)u!9)&s@RITT_x_2J`$r|r3F0SiK`pua$8!Ri=BuBQN+`jcY zZ~yb2rERm1-md(_17&?Vq1V>D@ZO1?XJ2`*>-oy#PvyNc&%S8!`%k~BUGd+p{r|T7 rC(pe6SnI~!*MGO{#d#xz`_A?MF!j|ROLZ#`yz;0#`