Cod sursa(job #2093480)

Utilizator mari2001Maria Ionescu mari2001 Data 23 decembrie 2017 19:53:28
Problema Interclasari Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<bits/stdc++.h>
using namespace std;
FILE *fin[21];
char buff[21][1<<12];
int cnt[21],offset[21],k[21];
set<pair<int,int>>se;
char nextc(int x){
if (cnt[x]==1<<12){
cnt[x]=0;
fread(buff[x],1,1<<12,fin[x]);}
offset[x]++;
return buff[x][cnt[x]++];}
int read(int &num,int x){
char ch;
ch='0';
do{
ch=nextc(x);
}while(ch<'0' || ch>'9');
num=0;
do{
num=num*10+ch-'0';
ch=nextc(x);
}while(ch>='0' && ch<='9');}
int main(){
ofstream fout("interclasari.out");
int n,i,j,s=0,x,y;
for(i=0;i<21;i++)
cnt[i]=1<<12,fin[i]=fopen("interclasari.in","r");
read(n,0);
for(i=0;i<n;i++){
read(k[i],i);
s=s+k[i];
fseek(fin[i+1],offset[i]+1,SEEK_SET);
offset[i+1]=offset[i];
for(j=1;j<=k[i];j++)
read(x,i+1);}
for(i=0;i<n;i++)
if (k[i]){
k[i]--;
read(x,i);
se.insert(make_pair(x,i));}
fout<<s<<'\n';
while(!se.empty()){
fout<<se.begin()->first<<' ';
x=se.begin()->second;
se.erase(se.begin());
if (k[x]>0){
k[x]--;
read(y,x);
se.insert(make_pair(y,x));}}
return 0;}