Cod sursa(job #213308)

Utilizator MirageRobert Sandu Mirage Data 9 octombrie 2008 13:33:46
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.79 kb
using namespace std;

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <utility>
#include <functional>

#define pb push_back
#define f first
#define s second
#define sz size
#define II inline
#define ll long long
#define db double
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define all(v) v.begin() , v.end()
#define C(v) C.erase( all(v) )
#define FORit(it,v) for(it = (v).begin();it != (v).end();++it)
#define mp make_pair

#define N_MAX 1<<10
#define L_MAX 1<<20
#define oo 1<<28
#define IN "fold.in"
#define OUT "fold.out"

int T,K(-1);
char buffer[L_MAX];
short int A[210],B[210],C[210],D[210];

II void scan()
{
//	freopen(IN,"r",stdin);
	scanf("%d\n",&T);
	fread(buffer,1,1<<20,stdin);
//	fclose(stdin);
//	freopen(OUT,"w",stdout);
	
}

II void get(short int V[])
{
	memset(V,0,sizeof(V));
	for(;buffer[K] < '0' || buffer[K] > '9';++K);
	for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
		V[++V[0] ] = buffer[K] - '0';
	FOR(i,1,V[0]/2)
		swap(V[i],V[ V[0] - i + 1]);
}

II void add(short int A[], short int B[])
{
    int i, t = 0;
    for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
        A[i] = (t += A[i] + B[i]) % 10;
    A[0] = i - 1;
}

II void sub(short int A[], short int B[])
{
    int i, t = 0;
    for (i = 1; i <= A[0]; i++)
        A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
    for (; A[0] > 1 && !A[A[0]]; A[0]--);
}


II void solve()
{
	get(B);
	get(C);
	get(D);
	
	memset(A,0,sizeof(A));
	
	add(A,C);
	add(A,C);
	sub(A,B);
	sub(A,D);
	
	for(int i=A[0];i>=1;--i)
		printf("%d",A[i]);	
	printf("\n");
}

int main()
{
	for(scan(),++T;--T;solve() );
	return 0;
}