usaco1.2.*

来源:互联网 发布:linux重启后进不去系统 编辑:程序博客网 时间:2024/06/10 17:51
usaco1.2.1

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
struct sz
{
       int l;
       int r;
};
struct sz a[5500];
int Partition(struct sz A[],int p,int r)
{
    int x=A[r].l;
    int i=p-1;
    for(intj=p;j<=r-1;j++){
           if(A[j].l<= x){
                     i =i+1;
                     int swampl= A[i].l;
                     A[i].l =A[j].l;
                     A[j].l =swampl;
                     int swampr= A[i].r;
                     A[i].r =A[j].r;
                     A[j].r =swampr;
           }
    }
    int swampl =A[r].l;
    A[r].l = A[i+1].l;
    A[i+1].l = swampl;
    
    int swamp2 =A[r].r;
    A[r].r = A[i+1].r;
    A[i+1].r = swamp2;
    
    return i+1;
}     
int QuickSort(struct sz A[], int p, int r)
{
    if(p <r)
    {
          intq=Partition(A, p, r);
         QuickSort(A, p, q-1);
         QuickSort(A, q+1, r);
    }
}    
int selectMax(int a, int b)
{
    if(a >=b)
        return a;
    else return b;
    
}  
int main(int argc, char *argv[])
{
    int n;
    int min = 0;
    int max = 0;
    int min_left,min_right;
    int max_left,max_right;
    FILE *fin =fopen("milk2.in", "r");
    FILE *fout =fopen("milk2.out", "w");
    fscanf(fin, "%d",&n);
    for(int i = 0; i< n; i++)
          fscanf(fin, "%d%d", &a[i].l,&a[i].r);
   QuickSort(a,0,n-1);
    for(int i = 0; i< n; i++)
           printf("%d%d\n", a[i].l, a[i].r);
    max_left = a[0].l;
    max_right =a[0].r;
    max = max_right -max_left;
    for(int i = 1; i< n; i++)
    {
           if(a[i].l> a[i-1].r)
          
                   min_left = a[i].l;
                   min_right = a[i-1].r;
                   max_left = a[i].l;
                   max_right = a[i].r;
                   if((min_left - min_right)> min)
                              min =min_left - min_right;
           }
           else
           {
              max_right = selectMax(a[i].r,a[i-1].r);
              a[i].r = max_right;
              a[i-1].r = max_right;
              if((max_right - max_left)> max)
                              max =max_right - max_left;                  
           }
    }
          
    fprintf(fout, "%d %d\n",max, min);
    //system("PAUSE");
    returnEXIT_SUCCESS;
}

usaco1.2.2

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=15;

int num,ok;
charstart[MAXN][MAXN],end[MAXN][MAXN],start1[MAXN][MAXN];

bool ratate(char start[MAXN][MAXN],char end[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(end[j][num-1-i]!=start[i][j]) return false;
return true;
}

bool ratate2(char start[MAXN][MAXN],charend[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(end[num-1-i][num-1-j]!=start[i][j]) return false;
return true;
}

bool ratate3(char start[MAXN][MAXN],charend[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(end[num-1-i][i]!=start[i][j]) return false;
return true;
}

bool reflex(char start[MAXN][MAXN],char end[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(end[i][num-1-j]!=start[i][j]) return false;
return true;
}

bool combination(char start[MAXN][MAXN],charend[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)start1[i][j]=start[i][num-1-j];
if(ratate(start1,end) || ratate2(start1,end) ||ratate3(start1,end)) return true;
return false;
}

bool original(char start[MAXN][MAXN],charend[MAXN][MAXN])
{
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(start[i][j]!=end[i][j]) return false;
return true;
}

int main()
{
freopen("transform.in","r",stdin);freopen("transform.out","w",stdout);
scanf("%d",&num);
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)cin>>start[i][j];
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)cin>>end[i][j];
if(ratate(start,end)) ok=1;
else if(ratate2(start,end)) ok=2;
else if(ratate3(start,end)) ok=3;
else if(reflex(start,end)) ok=4;
else if(combination(start,end)) ok=5;
else if(original(start,end)) ok=6;
else ok=7;
printf("%d\n",ok);
return 0;
}

usaco1.2.3

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char a[20], b[20], c[20];
char code[27] ={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','0','7','7','8','8','8','9','9','9','0'};
int main(int argc, char *argv[])
{
    bool flag = false;
    freopen("namenum.in","r", stdin);
    freopen("namenum.out","w", stdout);
    freopen("dict.txt", "r",stderr);
    gets(a);
    int i;
    while(fscanf(stderr,"%s", b)!= EOF)
    {
                   if(code[b[0] - 'A'] != a[0])
                              continue;
                    for(i = 0;b[i]; i++)
                    {
                          c[i] = code[b[i] - 'A'];
                    }
                    c[i] ='\0';
                   if(!strcmp(a, c))
                    {
                               flag =true;
                              puts(b);
                    }
    }
    if(!flag)
           puts("NONE");
    //system("PAUSE");
    returnEXIT_SUCCESS;
}

usaco1.2.4
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
int Check(int x, int base)
{
    char code[] ="0123456789";
    char buff[20];
    char *p = buff, *q =buff;
    for(; *q++ = code[x�se], x /= base; );
    for(; p <--q; ++p)
         if(*p != *q)
              return 0;
    return 1;
}
int main(int argc, char *argv[])
{
    freopen("dualpal.in","r", stdin);
    freopen("dualpal.out","w", stdout);
    int m, n;
    scanf("%d%d",&n, &m);
    for(; ++m, n; )
    {
         int cnt = 0;
         for(int base = 2; base<= 10; base++)
                cnt +=Check(m, base);
         if(cnt >=2)
         {
               --n;
              printf("%d\n", m);
         }
    }
  //  system("PAUSE");
    returnEXIT_SUCCESS;
}