CSES - Datatähti 2019 alku - Results
Submission details
Task:Leimasin
Sender:Tume7
Submission time:2018-10-03 23:34:25 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:94:9: error: 'reverse' was not declared in this scope
         reverse(iList.begin(), iList.end());
         ^~~~~~~
input/code.cpp:98:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < iList.size(); i++) {
                         ~~^~~~~~~~~~~~~~

Code

#include <iostream>
#include <string>
#include <vector>

using namespace std;


int main() {
    string s;//tavoitemerkkijono
    string leima;//annettu leima
    string tayte;//täyte
    vector<int> iList;
    
    int n;//tavoitemerkkijonon pituus
    int m;//leiman pituus
    bool ok = false;
    
    
    cin>>s>>leima;
    
    string s1 = s; //työstettävä kopio merkkijonosta
    n = s.length();
    m = leima.length();
    
    for(int i=0; i < m; i++){
        tayte += "?";
    }
    
    //SYÖTTEIDEN HYLKÄÄMINEN:
    
    
    //jos leima pidempi kuin tavoite, ei onnistu
    if(m > n){
        cout<<-1;
    }//jos tavoitteen 1. ja viimeinen merkki eivät täsmää, ei onnistu
    else if(s[0] != leima[0] || s[n-1] != leima[m-1])
    {
        cout<<-1;
    }//jos merkkijono ei sisällä leimaa, ei onnistu
    else if(s.find(leima) == std::string::npos){
        cout<<-1;//TÄMÄ
    }//jos tavoitteesta löytyy merkkejä, joita ei ole leimassa, ei onnistu
    else{
        for(int i=0; i < n-1; i++){
            
            if(leima.find(s[i]) == std::string::npos){
                cout<<-1;
                break;
            }
        }
        ok = true;
    }
    
    //HYVÄKSYTTYJEN SYÖTTEIDEN KÄSITTELY
    int x = 0;
    
    if(ok){
        //etsitään kaikki 1. kerroksen leimat
        while(s.find(leima, x) != std::string::npos){
            x = s.find(leima, x);
            s1.replace(x, m, tayte);
            iList.push_back(x);
            x += 1;
        }
        //täydennetään toisen kerroksen leimat
        for(int i=0; i < n; i++){
            if(s1[i] != '?'){
                if(leima.find(s[i]) != std::string::npos){
                    int b = leima.find(s[i]);

                    s1.replace(i-b, m, leima);

                    iList.push_back(i-b);
                    
                    s1.replace(i-b, m, tayte);
                }
                
            }
        }
        //täydennetään päällimmäiset leimat
        x = 0;
        while(s.find(leima, x) != std::string::npos){
            x = s.find(leima, x);
            s1.replace(x, m, leima);
            iList.push_back(x);
            x += 1;
        }
        
    }
    
    
    if(ok){
        
        reverse(iList.begin(), iList.end());
        
        
        cout<<iList.size()<<"\n";
        for (int i = 0; i < iList.size(); i++) {
            cout << iList[i]+1 << " ";
        }
        
        
    }
    
    
    
    
    
    
    return 0;
}