Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1091 Kbiti  (Citit de 4296 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