Volume 1 / 0148->0152

Problem 0148 : Candy and Class Flag

#include <iostream>
#include <iomanip>

using namespace std;


int main(void)
{
	int n;
	while( cin >> n ){
		cout << "3C";
		cout.width(2);
		cout.fill('0');
		if( n%39 )
			cout << n%39 << endl;
		else
			cout << 39 << endl;
	}

	return 0;
}

Problem 0149 : Eye Test

#include <iostream>


using namespace std;

int main(void)
{
	int i, j;
	int m[4][2] = {0};
	double e[2];

	while( cin >> e[0] >> e[1] ){
		for( i=0; i<2; i++ ){
			if( e[i] >= 1.1 )
				m[0][i]++;
			else if( e[i] >= 0.6 )
				m[1][i]++;
			else if( e[i] >= 0.2 )
				m[2][i]++;
			else
				m[3][i]++;
		}
	}

	for( i=0; i<4; i++ ){
		for( j=0; j<2; j++ ){
			if( j ) cout << " ";
			cout << m[i][j];
		}
		cout << endl;
	}

	return 0;
}

Problem 0150 : Twin Prime

#include <iostream>
#include <vector>

using namespace std;


int n;
vector<bool> primes;


void eratos()
{
	int i, j;


	primes[0] = primes[1] = false;
	primes[2] = true;
	for( i=3; i<=n; i++ ){
		if( i%2 )
			primes[i] = true;
		else
			primes[i] = false;
	}

	for( i=3; i*i<=n; i++ )
		if( primes[i] )
			for( j=i+i; j<=n; j+=i )
				primes[j] = false;

	return;
}

int main(void)
{
	int i;

	while( cin >> n, n!=0 ){
		primes.clear();
		primes.resize(n+1);

		eratos();

		for( i=n; i>=0; i-- ){
			if( primes[i] && primes[i-2] ){
				cout << i-2 << " " << i << endl;
				break;
			}
		}
	}

	return 0;
}

Problem 0151 : Grid

#include <iostream>
#include <string>

using namespace std;

#define MAX 255


int n;
int cnt[MAX+2][MAX+2][8];
bool grid[MAX+2][MAX+2];

void calc()
{
	int i, j, k;
	int max;
	int dx[8] = { 0, 1, 1, 1, 0, -1, -1, -1 };
	int dy[8] = { 1, 1, 0, -1, -1, -1, 0, 1 };

	max = 0;
	for( i=1; i<=n; i++ ){
		for( j=1; j<=n; j++ ){
			if( grid[i][j] ){
				for( k=0; k<8; k++ ){
					cnt[i+dx[k]][j+dy[k]][(k+4)%8] = cnt[i][j][(k+4)%8]+1;
					if( max < cnt[i+dx[k]][j+dy[k]][(k+4)%8] )
						max = cnt[i+dx[k]][j+dy[k]][(k+4)%8];
				}
			}
		}
	}

	cout << max << endl;

	return;
}

int main(void)
{
	int i, j, k;
	string input;

	while( cin >> n, n!=0 ){
		for( i=0; i<=n+1; i++ ){
			for( j=0; j<=n+1; j++ ){
				grid[i][j] = false;
				for( k=0; k<8; k++ )
					cnt[i][j][k] = 0;
			}
		}

		for( i=1; i<=n; i++ ){
			cin >> input;
			for( j=1; j<=n; j++ ){
				if( input[j-1] == '1' )
					grid[i][j] = true;
			}
		}

		calc();
	}

	return 0;
}

Problem 0152 : Bowling

#include <iostream>
#include <vector>

using namespace std;


int main(void)
{
	int m, f, input;
	int i, j;
	char ch;
	vector<int> id, p, work;

	while( cin >> m, m != 0 ){
		id.resize(m); p.resize(m);
		for( i=0; i<m; i++ ){
			cin >> id[i];

			work.clear();
			while( cin.get(ch), ch != '\n' ){
				cin.putback(ch);
				cin >> input;
				work.push_back(input);
			}

			p[i] = 0; j = 0;
			for( f=1; f<10; f++ ){
				p[i] += work[j];
				if( work[j] == 10 ){
					p[i] += work[j+1] + work[j+2];
					j++;
					continue;
				}
				j++;

				p[i] += work[j];
				if( work[j-1]+work[j] == 10 )
					p[i] += work[j+1];
				j++;
			}

			while( j < work.size() ){
				p[i] += work[j];
				j++;
			}
		}

		int max;
		for( i=0; i<p.size(); i++ ){
			max = 0;
			for( j=1; j<p.size(); j++ ){
				if( p[max] < p[j] )
					max = j;
				if( p[max] == p[j] )
					max = ( id[max] < id[j] ) ? max : j;
			}
			cout << id[max] << " " << p[max] << endl;
			p[max] = -1;
		}
	}

	return 0;
}