[shkola] Re: pishtov

  • From: Bono Nonchev <madcow@xxxxxx>
  • To: shkola@xxxxxxxxxxxxx
  • Date: Thu, 20 Nov 2003 11:24:48 +0200 (EET)

da, vqrno, trqbvashe da ti gi pratq. za revansh ti prashtam nqkolko resheniq 
(na stari zadachi, ot 2001 i 2003) v koito sym pisal dfs i dejkstra v 
poslednite dni dyrja da obeleja. shkolata naistina mi pokaza kakvo trqbva da 
doprocheta. kakto se kazva "some slight last-minute adjustments). mai veche i 
zagrqh ideqta, taka che se nadqvam da nqmam problem s neq. ednata e procedura 
za minimaxno tyrsene v zadachata ot minalata godina - A1. dinamichno 
optimirana. edna e za ocvetqvane na karta v 2 cvqta, obache q pisah s dfs! 
nadqvam se da vidq kak da pisha stek kratko, za da moga da izpolzvam bfs. vqrno 
e che izpolzvaneto na piramida shte poniji slojnostta na dejkstrata. ama ne sym 
siguren kak tochno da q napravq.

bono


 >
 >      Emi taka i ne poluchih nito edin ot 4-te graphski algorityma kakto se 
 > razbrahme na poslednata shkola, predi da vi pratq pishtova, ama kvo da se 
 > prai, myrzeli...
 >      DFS()-to i BFS()-to nqma da gi komentiram :) te sa za da se vidi kak se 
 > polzva dist[]
 >
 

-----------------------------------------------------------------
http://www.Elmaz.com - Запознанства
//B2

#include "iostream.h"
#include "math.h"

#define MAXSTACK 100

int N,M;
char T[1000000];
char P[100];
char psT[100];
char psP[100];

void push(char *ps, char c)
{
        ps[int(c)-32]++;
}
void clear(char *ps)
{
        for(int i=0;i<MAXSTACK;i++)
                ps[i]=0;
}
int pop(char *ps, char c)
{
        return (((ps[int(c)-32]--)<0)? -1 : ps[int(c)-32]);
}
int cmp(char *ps1, char *ps2)
{
        int r=0;
        for(int i=0;i<MAXSTACK;i++)
                r+=abs(ps1[i]-ps2[i]);
        return (r==0);
}

void main()
{
        int i,r=0;;
        cin>>N;
        cin>>M;
        cin>>P;
        cin>>T;
        clear(psT);
        clear(psP);
        for(i=0;i<N;i++)
                push(psP,P[i]);
        for(i=0;i<N;i++)
                push(psT,T[i]);
        
        for(i=N;i<M;i++)
        {
                if(cmp(psT,psP)) r++;
                push(psT, T[i]);
                pop(psT, T[i-N]);
        }
        cout<<r;
}
//A1

#include "iostream.h"

int inv(int a) {return -a;}

int field[500][500];

int minimax(int a, int b, int turn)
{
        if(field[a][b]!=0)
                return field[a][b];
        if(a==1&&b==1) 
                return -1;
        int i,j;
        int tres=0;
        for(i=1,j=1;j<a;i++,j=i*i)
                if(minimax(a-j,b,inv(turn))==-1)
                        tres=1;
        for(i=1,j=1;j<b;i++,j=i*i)
                if(minimax(a,b-j,inv(turn))==-1)
                        tres=1;
        if(tres==0)     //ako nqma pyt kym pobeda na tozi igrach...
                tres=-1;
        field[a][b]=tres;
        return tres;
}

void main()
{
        int i,j;
        for(i=0;i<500;i++)
                for(j=0;j<500;j++)
                        field[i][j]=0;
        int i1,j1,i2,j2;
        int r=0;
        cin>>i1>>j1>>i2>>j2;
        for(i=i1+1;i<i2;i++)
                for(j=j1+1;j<j2;j++)
                        if(minimax(i,j,1)==1)
                                r++;
        cout<<r;
}
//SEGS

#include "fstream.h"
#include "stdlib.h"

struct cpath
{
        int size;
        int path[500];
        cpath(){size=0;}
        void add(int n) {path[size]=n;size++;}
        void add(cpath t) {for(int i=0;i<t.size;i++) add(t.path[i]);}
        void clear() {size=0;}
};

int data[500][2];
int N;
int adj[500][500];
int cmp[500];
cpath maxpaths[500];
int isin(int a[2], int b[2])
{
        if(a[0]<b[0]&&a[1]>b[1]) return 1;
        else return 0;
}

cpath findmax(int a)
{
        cpath result,t;
        if(!cmp[a]) 
        {
                for(int i=0;i<N;i++)
                        if(adj[a][i])
                        {
                                t=findmax(i);
                                if(result.size<t.size)
                                        result=t;
                        }
                if(maxpaths[a].size<result.size)
                        maxpaths[a]=result;
                cmp[a]=1;
        }
        t.clear();
        t.add(a);
        t.add(maxpaths[a]);
        return t;       
}


void main()
{
        int i=0,j=0;
        ifstream ifile;
        ofstream ofile;
        ifile.open("c:\\segs.inp");
        ofile.open("c:\\segs.out");
        ifile>>N;
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        adj[i][j]=0;
        for(i=0;i<N;i++)
        {
                ifile>> data[i][0]>>data[i][1];
        }
        
        //
/*      N=499;
        for(i=0;i<N;i++)
        {
                data[i][0]=rand();
                data[i][1]=rand();
        }//*/
        //
        for(i=0;i<N;i++)
                cmp[i]=0;
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        if(isin(data[i],data[j])&&i!=j)
                                adj[i][j]=1;
/*      for(i=0;i<N;i++)
        {
                for(int j=0;j<N;j++)
                        cout<<adj[j][i]<<' ';
                cout<<'\n';
        }*/
        //postroili sme grafa. sega s dfs tyrsim maksimalen pyt ot vseky vryh...
        //ndmax(
        for(i=0;i<N;i++)
                findmax(i);
        int cm=0;
        for(i=0;i<N;i++)
                if(maxpaths[i].size>maxpaths[cm].size)
                        cm=i;
        for(i=maxpaths[cm].size-1;i>=0;i--)
                ofile<<maxpaths[cm].path[i]+1<<' ';
        ofile<<cm+1;
        ifile.close();
        ofile.close();
}
//TWOC

#include "fstream.h"

int inv(int a)
{
        return (a==0?1:0);
}
                

int adj[100][100];
int Possible=1;
int result[100];
//int 
int N;

void dfs(int a, int color)
{
        if(result[a]==inv(color))
                Possible=0;
        if(result[a]==color)
                return;
        result[a]=color;
        for(int i=1;i<=N;i++)
        {
                if(!Possible)
                        return;
                if(adj[a][i])
                        dfs(i, inv(color));
        }       
}

void main()
{
        ifstream inp;
        ofstream out;
        int na;
        inp.open("c:\\twoc.inp");
        out.open("c:\\twoc.out");
        inp>>N;
        for(int j=1;j<=N;j++)
        {
                for(int k=1;k<=N;k++)
                        adj[j][k]=0;
                result[j]=-1;
        }
        
        for(int i=1;i<=N;i++)
        {
                while(1)
                {
                        inp>>na;
                        if(na==0) break;
                        else 
                                adj[i][na]=adj[na][i]=1;
                }
        }
//      result[1]=0;
        dfs(1,0);
        if (Possible)
                for(i=1;i<=N;i++)
                        out<<result[i];
        else
                out<<-1;

        inp.close();
        out.close();
}
//BLEK

#include "fstream.h"

ifstream ifile;
ofstream ofile;
long b[10000];
long N, K;

void computefib()
{
        int i;
        b[0]=b[1]=1;
        for(i=2;i<N+1;i++)                                      //izchislqvame 
chislata na fibonachi
                b[i]=b[i-1]+b[i-2];
}

void output(int n, int k)
{
        while(n>0)
        {
                if(k>b[n-1])
                {
                        ofile<<"10";
                        k-=b[n-1];
                        n-=2;
                }
                else
                {
                        ofile<<'0';
                        n--;
                }
        }

//      else cout<<"error trying to compute out(N,K) "<<n<<k;
}

void main()
{
        ifile.open("c:\\BLEX.inp");
        ofile.open("c:\\BLEX.out");
        ifile>>N>>K;
        computefib();   
        if(b[N]<K)              //ako broq na redicite ot N elementa e <K..
                ofile<<-1;
        else
        {
                output(N,K);
                ofile<<'\n';
        }
//              output(N+1,K);
//              ofile<<'\n';
//              output(N+2,K);
//              ofile<<'\n';
        ifile.close();
        ofile.close();
}

Other related posts: