이모저모

boj 14622 본문

BOJ

boj 14622

Alpa 2017. 6. 7. 11:43


해결방법

에라토스테네스의 체를 이용하여 소수를 구함

각 조건에 맞게 시뮬레이션이 돌려주면된다.

문제의 설명이 조금 이상하긴하다.



아래는 소스코드이다.

#include <iostream> 

#include <iterator>

#include <algorithm> 

#include <vector>

#include <list>

#include <map>

#include <set>

#include <queue>

#include <stack>

#include <string>

#include <cmath>

#include <cstdio>

#include <cstring>

using namespace std;

#define MOD 1000000007

#define INF 2147483647

#define LNF 9223372036854775807

#define pb push_back

#define mp make_pair

typedef long long ll;

typedef unsigned long long ull;

typedef pair<ll,ll> pll;

typedef pair<int,int> pii;


int n,number[5000001];

int main(){

freopen("sample.txt","r",stdin);

scanf("%d",&n);

int len=sqrt(5000000);

ll ascore=0,bscore=0;

vector<int> aBig,bBig;

for(int i=2;i<=len;i++){

if(number[i]==-1) continue;

for(int j=i+i;j<5000001;j+=i) number[j]=-1;

}

number[1]=-1;

for(int i=0,a,b;i<n;i++){

scanf("%d%d",&a,&b);

if(number[a]==-1){

if(bBig.size()<3) bscore+=1000;

else bscore+=bBig[0];

}

else if(number[a]!=0){

ascore-=1000;

}

else{

number[a]=1;

aBig.insert(lower_bound(aBig.begin(),aBig.end(),a),a);

if(aBig.size()>3) aBig.erase(aBig.begin());

}


if(number[b]==-1){

if(aBig.size()<3) ascore+=1000;

else ascore+=aBig[0];

}

else if(number[b]!=0){

bscore-=1000;

}

else{

number[b]=2;

bBig.insert(lower_bound(bBig.begin(),bBig.end(),b),b);

if(bBig.size()>3) bBig.erase(bBig.begin());

}

}

if(ascore<bscore) printf("소수 마스터 갓규성\n");

else if(ascore==bscore) printf("우열을 가릴 수 없음\n");

else printf("소수의 신 갓대웅\n");

return 0;

}








'BOJ' 카테고리의 다른 글

boj 14620  (0) 2017.06.07
13549  (0) 2017.06.03
14614  (0) 2017.05.31
14577  (0) 2017.05.29
14552  (0) 2017.05.26
Comments