답안 #445555

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
445555 2021-07-18T16:46:44 Z victoriad Karte (COCI15_karte) C++14
50 / 50
1 ms 308 KB
#include <fstream>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <utility>
#include <queue>
using namespace std;

void comprobarcarta(int & PALO,bool & error,vector<bool>&cartas,string &s,int i){
        int numero;
        if(s[i*3+1]=='0'){
            numero=s[i*3+2]-49;//leemos el número,quitamos 49 ya que el 1 corresponde al 49 en la tabla char ascii y por tanto si hacemos -49 nos queda el número-1, que es el que nos interesa para trabajar con el vector de bool
        }
        else{
            numero=s[i*3+2]+10-49;//leemos el número
        }
        
        if(cartas[numero]){//si ya hemos leido el número antes, ahora lo tenemos repetido-->error=true
            error=true;
        }
        else{
            cartas[numero]=true;//si no lo habíamos leido antes, ahora lo marcamos como leido
            PALO--;//nos falta una carta menos de ese palo
        }
 
}
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    vector<bool>p(13,false); // al principio no tenemos ninguna carta, cuando tengamos una pondremos en su palo y número un true
    vector<bool>k(13,false);
    vector<bool>h(13,false);
    vector<bool>t(13,false);
    string s;
    int P=13,K=13,H=13,T=13;// las cartas que faltan de cada palo
    cin>>s; // el string de entrada
    bool error=false;//si error=true significa que tenemos una carta dos veces y tenemos que imprimir "GRESKA"
    int x=s.size();
    int y;
    for(int i=0;i<x/3;i++){ //Pasamos el string de entrada
        if(error)break;//Si hay dos iguales error=false y ya no nos hace falta seguir mirando el string 

        //mirmamos primero el palo y luego en comprabarcarta el número
        if(s[i*3]=='P'){ // Palo P
            comprobarcarta(P,error,p,s,i);
        }
        else if(s[i*3]=='K'){// Palo K
            comprobarcarta(K,error,k,s,i);
        }
        else if(s[i*3]=='H'){//Palo H
            comprobarcarta(H,error,h,s,i);
        }
        else{//Palo T
            comprobarcarta(T,error,t,s,i);
        }
        
    }
    if(!error){
            cout<<P<<" "<<K<<" "<<H<<" "<<T;
        }
        else{
            cout<<"GRESKA";
        }
  return 0;
}

Compilation message

karte.cpp: In function 'int main()':
karte.cpp:41:9: warning: unused variable 'y' [-Wunused-variable]
   41 |     int y;
      |         ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 308 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct