Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- ifstream fin("virgule.in");
- ofstream fout("virgule.out");
- int intrare[100];
- int i, n;
- int nrv = 1;
- int v[100], sol[100];
- bool mai_mare(int i, int j)
- {
- if(i>n)
- {
- cout<<"mai_mare::i a depasit limita i="<<i<<" n="<<n;
- exit(-1);
- }
- if(j>n)
- {
- cout<<"mai_mare::j a depasit limita j="<<j<<" n="<<n;
- exit(-1);
- }
- ///aflam dimensiunea numarului
- int y=i,z=j;
- while(y<n && v[y]==0)++y;
- while(z<n && v[z]==0)++z;
- //cout<<i<<' '<<y<<" "<<j<<' '<<z<<endl;
- ///scapam de zero-uri
- while(!intrare[i])++i;
- while(!intrare[j])++j;
- ///daca lungimile nu sunt egale
- if (y-i > z-j)return true;
- if (y-i < z-j)return false;
- ///daca sunt
- while(i <= y && j <= z)
- {
- //cout<<(int)intrare[i]<<' '<<(int)intrare[j]<<endl;
- if(intrare[i] > intrare[j])
- return true;
- else if(intrare[i] < intrare[j])
- return false;
- ++i,++j;
- }
- return true;
- }
- bool solutie()
- {
- int st=1;
- while(v[st] == 0)++st;
- int dr = st + 1;
- while(v[dr] == 0)++dr;
- while (dr < n)
- {
- cout<<st<<' '<<dr<<endl;
- if(st != dr && mai_mare(st, dr))
- return false;
- st = dr++;
- while(v[dr] == 0)++dr;
- }
- return true;
- }
- void bkt(int k)
- {
- if(k==n){
- if(solutie())
- for(int i = 1; i <= n; ++i)
- sol[i] = v[i];
- }
- else for(int i = 0; i <= 1; ++i)
- {
- v[k]=i;
- bkt(k+1);
- }
- }
- int main()
- {
- ///citire
- i=1;char ch;
- while(fin>>ch){
- intrare[i] = ch - '0';
- ++i;
- }
- n = i-1;
- ///rezolvare
- bkt(1);
- ///afisare
- for(i=1;i<=n;++i)
- {
- intrare[i];
- cout<<intrare[i];
- if(sol[i])cout<<',';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement