Pagini recente » Cod sursa (job #297878) | Cod sursa (job #1335723) | Cod sursa (job #2700996) | Cod sursa (job #2837911) | Cod sursa (job #2193465)
#include <bits/stdc++.h>
using namespace std;
///vom citi cate bsize caractere mereu, pe care le vom stoca in stringul str
///ideea e sa citim un numar relativ mare de caractere, dar nu foarte mare, astfe incat sa nu ocupam multa memorie
///e de preferat sa alegem bsize o putere de 2 deoarece se aloca mai bine memoria
///pe caz general, bsize il aleg (1 << 16), insa daca avem mai multa memorie il putem declara si (1 << 18) sau mai mult
///pos reprezinta pozitia curenta unde ne aflam in stringul str
///pentru a verifica in timp de concurs daca am facut bine parsarea, este bine sa setam bsize un numar foarte mic,
///de exemplu (1 << 2), pentru a ne asigura ca facem bine trecerea de la un block la altul.
const int bsize = (1 << 16);
const int nmax = 1e5 + 10;
int pos;
char str[bsize];
int x;
int n;
int a[nmax];
void read(int &x) {
x = 0;
///cat timp caracterul curent nu e cifra avansam
while (!isdigit(str[pos])) {
pos++;
if (pos == bsize) {
fread(str, 1, bsize, stdin);
pos = 0;
}
}
///cat timp caracterul curent este cifra avansam, si stocam numarul
while (isdigit(str[pos])) {
x = x * 10 + (str[pos] - '0');
pos++;
if (pos == bsize) {
fread(str, 1, bsize, stdin);
pos = 0;
}
}
///in ambele cazuri, daca se intampla sa ajungem la finalul stringului str, citim altul
}
int main()
{
freopen("perle.in","r",stdin);
freopen("perle.out","w",stdout);
ios_base :: sync_with_stdio(false);
///aici citim initial un block de bsize caractere
fread(str, 1, bsize, stdin);
pos = 0;
read(n);
for (int i = 1; i <= n; ++i) {
read(a[i]);
for (int j = 1; j <= a[i]; j++)
read(x);
}
int s = 0;
for (int i = 1; i <= n; ++i)
s += a[i];
cout << s;
return 0;
}