Cod sursa(job #2329241)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 26 ianuarie 2019 15:08:30
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.13 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("eq4.in");
ofstream fout("eq4.out");
long long cerinta,termen,p=1,k,i,j;
long long  sol[1002500];
long long nr=0;
long long v[6];
char c[100014];
int cautbin(int x){
 int st=1,dr=k;
 while(st<=dr){
    int mid=(st+dr)/2;
    if(x>sol[mid])
        st=mid+1;
    else
        dr=mid-1;
 }
 dr++;
int nr=0;
for(int i=dr;sol[i]==x&&i<=k;i++)
    nr++;

return nr;
}
int main()
{
    fin>>cerinta;
    fin>>c;
    termen=0;
    for(int i=strlen(c)-1;i>=0;i--){
        if(c[i]=='x')
            termen=1;
        else
            if(c[i]=='y')
            termen=2;
             else
            if(c[i]=='z')
            termen=3;
                 else
            if(c[i]=='t')
            termen=4;
            else
            if(c[i]=='+'){
                    if(nr==0&&termen>0&& (c[i+1]=='x'||c[i+1]=='y'||c[i+1]=='z'||c[i+1]=='t'))
                    nr=1;
                v[termen] +=nr;
                termen=0;
                nr=0;
                p=1;
            }
            else
                if(c[i]=='-'){
                    if(nr==0&&termen>0&& (c[i+1]=='x'||c[i+1]=='y'||c[i+1]=='z'||c[i+1]=='t'))
                    nr=1;
                v[termen] -=nr;
                termen=0;
                nr=0;
                p=1;
            }
            else{
                nr += (c[i]-48)*p;
                p *=10;
            }
    }
    if(cerinta==1){
   fout<<v[0]+v[1]+v[2]+v[3]+v[4];
    return 0;
    }
    long long a,b,e;
    fin>>a>>b>>e;
    e =e-v[0];
    // x = v[1]
    // y= v[2]
    // z= v[3]
    // t= v[4];
    for(i=a;i<=b;i++)
    for(j=a;j<=b;j++){
        sol[++k]=i*v[1]+j*v[2];
    }
    sort(sol+1,sol+k+1);
    sol[k+1]=9223370368547758078;
    k++;
  // for(i=1;i<=k;i++)
    //    cout<<sol[i]<<" ";
  //  cout<<"\n";
    for(i=a;i<=b;i++)
    for(j=a;j<=b;j++){
        nr+=cautbin(e-(i*v[3]+j*v[4]));
//cout<<e-(i*v[3]+j*v[4])<<" "<<cautbin(e-(i*v[3]+j*v[4]))<<endl;
    }
    fout<<nr;
    //cout<<cautbin(16);
}