Accounting | Trading | Tools | Accounts | Login
Kurniady Systems - Tools
 
Tuesday, 07 September 2010 - 17:08:02
Home | About

Viewing Text Document

Title:

INC 2008 Qual A

Owner: Andrian Kurniady

Last updated on: Tuesday, 15 July 2008

Description:

My solution for INC 2008 qualification problem A.

Content:

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    int ntc;
    scanf("%d", &ntc);
    while (ntc--){
        int n;
        scanf("%d", &n);
        vector<int> data;
        for (int i=0;i<n;i++){
            int x;
            scanf("%d", &x);  
            data.push_back(x);
        }
        sort(data.rbegin(), data.rend());

        int abcount = 0;
        for (int i=0;i<data.size();i++)
            if (data[i]>=500) abcount++;
            
        if (abcount==0) {
            puts("0 0 0 0"); continue;}
                    
        int maxs = data[0];
        int goldcount=1;
        while (goldcount<n && data[goldcount]>=maxs-2 && data[goldcount]>=500) goldcount++;
                
        int silvercount=0;
        int bronzecount=0;
        
        if (goldcount==2){
            if (n>2 && data[2]>=500){
                bronzecount=1;
                while (goldcount+bronzecount<n && data[goldcount+bronzecount]>=500 
                            && data[goldcount+bronzecount]>=data[goldcount]-2){
                    bronzecount++;
                }
            }
        } else if (goldcount>2){
            bronzecount=0;
            while (goldcount+bronzecount<n && data[goldcount+bronzecount]>=500 
                        && data[goldcount+bronzecount]>=data[goldcount-1]-2){
                bronzecount++;
            }
        } else {
            if (n>1 && data[1]>=500){
                silvercount=1;
                while (goldcount+silvercount<n && data[goldcount+silvercount]>=500 
                        && data[goldcount+silvercount]>=data[goldcount]-2){
                    silvercount++;
                }
                if (silvercount==1){
                    bronzecount=1;
                    while (goldcount+silvercount+bronzecount<n 
                            && data[goldcount+silvercount+bronzecount]>=500 
                            && data[goldcount+silvercount+bronzecount]>=data[goldcount+silvercount]-2){
                        bronzecount++;
                    }                    
                } else {
                    bronzecount=0;
                    while (goldcount+silvercount+bronzecount<n 
                            && data[goldcount+silvercount+bronzecount]>=500 
                            && data[goldcount+silvercount+bronzecount]>=data[goldcount+silvercount-1]-2){
                        bronzecount++;
                    }                    
                }                
            }
        }
        
        int total = silvercount+goldcount+bronzecount;
        int excellencecount = abcount-total;
        
        printf("%d %d %d %d\n", goldcount, silvercount, bronzecount, excellencecount);
    }
    
    return 0;
}

Please note that the document shown may be copyrighted. Please contact the owner of this document for the details.
Valid XHTML and CSS. Powered by Ruby on Rails.
 
Copyright © 2008 by Andrian Kurniady. All rights reserved.