Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1091 Kbiti  (Citit de 5869 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
•wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Decembrie 13, 2010, 00:37:03 »

Aici puteti discuta despre problema Kbiti.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
•hunter_ionutzzz
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #1 : Decembrie 13, 2010, 15:20:38 »

80 de pct...nasol la ultimele 2 teste imi da eroare la timp
Memorat
•dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #2 : Decembrie 13, 2010, 16:01:47 »

80 de pct...nasol la ultimele 2 teste imi da eroare la timp

Incearca sa schimbi citirea.Foloseste gets(S) pentru a citi o linie (un sir de biti de lungime L).
Memorat
•eudanip
Echipa infoarena
Nu mai tace
*****

Karma: 307
Deconectat Deconectat

Mesaje: 703



Vezi Profilul
« Răspunde #3 : Decembrie 20, 2010, 16:10:57 »

Foloseste urmatoarea citire:

scanf("%s",s);

E cea mai rapida citire care o stiu dar nu trebuie folosita mereu. In cazul in care ai spatii sau lungimea sirului depaseste 30 000 (sau asa ceva) e indicat sa nu o folosesti. In cazul acestei probleme ar trebui sa mearga.

Multa bafta.
Memorat
•SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #4 : Decembrie 20, 2010, 17:08:49 »

Pot sa te contrazic, fgets e mult mai rapid, eu am citit cu scanf, am avut 90 pct. iar cu fgets am luat 100 lejer. Cand volumul de date este mare, fgets face diferenta Wink.
Memorat
•brainwashed20
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #5 : Decembrie 29, 2010, 22:51:24 »

Puteti va rog sa ma ajutati sa-mi spuneti ce anume este gresit in sursa mea? Iau 90p si chiar nu inteleg unde este greseala...
Cod:
#include<cstdio>
#include<cstring>

using namespace std;

int main() {
freopen("kbiti.in","r",stdin);
freopen("kbiti.out","w",stdout);

char sir[32];
int T, i, j;
long long int sol;

scanf("%d\n",&T);
while(T--) {
scanf("%s",sir);
for(sol=0, i=strlen(sir)-1, j=0; i>=0; i--, j++)
sol+=(long long int)(sir[i]-'0')*(long long int)(1<<j);
printf("%lld\n",++sol);
}

return 0;
}


Memorat
•mathboy
Moderatori infoarena
Nu mai tace
*****

Karma: 150
Deconectat Deconectat

Mesaje: 259



Vezi Profilul
« Răspunde #6 : Decembrie 29, 2010, 23:27:04 »

Declara char sir [33] apoi inlocuieste
Cod:
sol+=(long long int)(sir[i]-'0')*(long long int)(1<<j);
cu asta
Cod:
sol+=(sir[i]-'0')*(1LL<<j);
si o sa ai 100 Smile
Memorat
•brainwashed20
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #7 : Decembrie 30, 2010, 02:00:06 »

mersi, acum merge. dar nu inteleg, ce face exact instructiunea asta "1LL" si practic de ce nu merge cum faceam eu?
Memorat
•sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #8 : Decembrie 30, 2010, 07:42:24 »

"1LL" este numarul 1 de tip long long. La cum faceai tu, intai se efectua shift si dupa conversia catre long long: practic rezultatul shiftarii ramanea int pana la conversie, de unde si rezultatul eronat. Cred ca ar fi mers si:
Cod:
(((long long)1) << j)
Memorat
•brainwashed20
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #9 : Decembrie 30, 2010, 11:33:35 »

aha, am inteles. multumesc mult de ajutor:)
Memorat
•SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #10 : Ianuarie 20, 2011, 10:30:34 »

Un sfat pentru cei din Pascal, ca sa luati 100 pct. Folositi SetTextBuf :
Cod:
 var Bufin : array[1 .. 1 shl 17] of char;
    Bufou : array[1 .. 1 shl 17] of char;
         
          begin
              .............
              SetTextBuf ( fisierin, Bufin ) ;
              SetTextBuf ( fisierout, Bufou ) ;
          end .
Memorat
•NicuCJ
Strain
*

Karma: 6
Deconectat Deconectat

Mesaje: 44



Vezi Profilul
« Răspunde #11 : Mai 08, 2012, 17:51:28 »

Eu am luat 100 cu un vector de puteri de la 2^1 pana la 2^32 (poate ajuta pe cineva).
Memorat
•S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #12 : Mai 08, 2012, 18:48:52 »

Tie nu ti-a intrat din cauza ca ai folosit pow. Fa si tu operatii pe biti sau baga exponentiere in timp logaritmic. http://infoarena.ro/problema/lgput Wink
Memorat
•geniucos
Vorbaret
****

Karma: 21
Deconectat Deconectat

Mesaje: 199



Vezi Profilul
« Răspunde #13 : Mai 08, 2012, 19:45:42 »

Eu iau 90 si nu inteleg de ce.Ma poate ajuta si pe mine cineva?
Cod:
gets(a+1);
m=strlen(a+1);
p=0;
for(j=1;j<=m;j++)
if(a[j]=='1') p=(unsigned long long)p+(1<<(m-j));
printf("%lld\n",p+1);

Edit: cand postezi cod in mesaje pe forum trebuie sa folosesti tag-ul code
« Ultima modificare: Mai 08, 2012, 20:19:50 de către Mihai-Alexandru Dusmanu » Memorat
•dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #14 : Mai 08, 2012, 20:22:15 »

Incearca sa faci cum e scris mai jos Wink. S-ar putea sa mearga. Cred ca la tine se buseste daca faci (1 << 31).
Cod:
(1LL << (m - j))
Memorat
•geniucos
Vorbaret
****

Karma: 21
Deconectat Deconectat

Mesaje: 199



Vezi Profilul
« Răspunde #15 : Mai 13, 2012, 14:58:05 »

Ms asta era greseala am luat 100 Yahoo!
Memorat
•vld7
Strain


Karma: 7
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #16 : Octombrie 01, 2012, 21:58:43 »

Nu prea are legatura cu problema ci cu cast-ul. Nu inteleg de ce nu merge sa faci asa:
Cod:
long long sol = 0;
sol += 1 << 31;

Pentru ca 1 << 31 nu incape pe int ci maxim (1 << 31) - 1 ?

Daca as avea
Cod:
long long sum;
int a = b = (1 << 31) - 1;
sum = a + b;
Merge direct sau tre sa fac cast si sa scriu sum =  1LL * a + b pentru ca (a + b) depaseste tipul lor de date(int) ?
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines