AOJ 0163 - Highway Toll

&& > ||(同順位でない)

#include<iostream>

int toMinute(int h, int m){
	return h * 60 + m;
}

int roundUp(int i){
	if(i % 50){
		return i - (i % 50) + 50;
	}
	return i;
}

//17*60+30 = 1050
//19*60+30 = 1170

int main(){
	int MAX_N = 7;
	int d[MAX_N+1][MAX_N+1], p[MAX_N+1][MAX_N+1];
	d[1][2] = 6;
	d[1][3] = 13;
	d[1][4] = 18;
	d[1][5] = 23;
	d[1][6] = 43;
	d[1][7] = 58;
	d[2][3] = 7;
	d[2][4] = 12;
	d[2][5] = 17;
	d[2][6] = 37;
	d[2][7] = 52;
	d[3][4] = 5;
	d[3][5] = 10;
	d[3][6] = 30;
	d[3][7] = 45;
	d[4][5] = 5;
	d[4][6] = 25;
	d[4][7] = 40;
	d[5][6] = 20;
	d[5][7] = 35;
	d[6][7] = 15;

	p[1][2] = 300;
	p[1][3] = 500;
	p[1][4] = 600;
	p[1][5] = 700;
	p[1][6] = 1350;
	p[1][7] = 1650;
	p[2][3] = 350;
	p[2][4] = 450;
	p[2][5] = 600;
	p[2][6] = 1150;
	p[2][7] = 1500;
	p[3][4] = 250;
	p[3][5] = 400;
	p[3][6] = 1000;
	p[3][7] = 1350;
	p[4][5] = 250;
	p[4][6] = 850;
	p[4][7] = 1300;
	p[5][6] = 600;
	p[5][7] = 1150;
	p[6][7] = 500;

	int a, na, ma;
	while(std::cin >> a >> na >> ma, !std::cin.eof()){
		int b, nb, mb;
		std::cin >> b >> nb >> mb;

		int min_a = toMinute(na, ma),
			min_b = toMinute(nb, mb);

		int big = (a>b)?a:b,
			small = (a<b)?a:b;

		if((1050 <= min_a && min_a <= 1170 ||
				1050 <= min_b && min_b <= 1170) &&
			 d[small][big] <= 40){
			std::cout << roundUp(p[small][big] / 2) << std::endl;
		}else{
			std::cout << p[small][big] << std::endl;
		}
	}
}