#include<bits/stdc++.h>
using namespace std;
struct p{
int x,y;
};
struct size_p{
p ps;
int sz;
};
vector<size_p>pos;
void change(p pos1,int tmpsize){
for(int i = 0;i < (int)pos.size();i++){
if(pos[i].ps.x == pos1.x && pos[i].ps.y == pos1.y){
pos[i].sz = max(pos[i].sz,tmpsize);
return;
}
}
pos.push_back((size_p){pos1,tmpsize});
}
int n,dot;
double area = 0;
int main(){
scanf("%d", &n);
for(int i = 1;i <= n;i++){
int x,y,m;
scanf("%d%d%d",&x,&y,&m);
for(int j = x;j <= x + m - 1;j++){
for(int k = y;k <= y - j;k++){
if(j < x + m - 1 && k < y - j){
// pos[(p){j,k}] = 1;
change((p){j,k},1);
// if(!in((p){j,k}))
// position.push_back((p){j,k});
}
else{
// pos[(p){j,k}] = max(pos[(p){j,k}],0);
change((p){j,k},0);
// if(!in((p){j,k}))
// position.push_back((p){j,k});
}
}
}
}
int half = 0;
for(int i = 0;i < (int)pos.size();i++){
if(pos[i].sz == 1)
area += 1;
else
half++;
}
area += (double)half / 2;
if(half % 2 == 0)
printf("%d.0",(int)area);
else
printf("%d.5",(int)area);
return 0;
}