OJ算法题

本文介绍了多个算法题目,包括可达性判断、二分查找、快速排序和最长公共子序列等,涉及图的遍历、数组操作和字符串处理。通过示例代码展示了如何解决这些问题,是理解数据结构和算法应用的好材料。
摘要由CSDN通过智能技术生成

1331 是否可达、keda

#include <stdio.h>
#include <string.h>
#define MAX 1000
struct Node{
    int v,net;
};
struct Node node[MAX];
int main(){
    int n,e,t,i,x,y,z,head[MAX],que[MAX],map[MAX/2][MAX/2],qh,qt;
    while(scanf("%d %d",&n,&e)!=EOF){
        memset(head,-1,sizeof(head));
        for(i = 0;i < e;i++){
            scanf("%d %d",&x,&y);
            node[i].v = y;
            node[i].net = head[x];
            head[x] = i;
        }
        scanf("%d",&t);
        while(t--){
            z = 0;
            memset(map,0,sizeof(map));
            qh = qt = 1;
            scanf("%d %d",&x,&y);
            if(x == y){
                printf("yes\n");
                continue;
            }
            que[qt++] = x;
            while(qh < qt){
                for(i = head[que[qh]];i != -1;i = node[i].net){
                    if(map[que[qh]][node[i].v] == 0){
                        map[que[qh]][node[i].v] = 1;
                        que[qt++] = node[i].v;
                    }
                    if(node[i].v == y){
                        z = 1;
                        break;
                    }
                }
                if(z == 1) break;
                qh++;
            }
            if(z == 1) printf("yes\n");
            else printf("no\n");
        }
        printf("\n");
    }
    return 0;
}

1351 二分查找、erfen

#include <stdio.h>
#define MAX 200000
int a[MAX],b[MAX];
void search(int x,int len){
    int low = 0,high = len-1;
    while(low <= high){
        int mid = (low + high)/2;
        if(a[mid] == x){
            printf("%d\n",mid);
            return;
        }else if(a[mid] > x){
            high = mid - 1;
        }else{
            low = mid + 1;
        }
    }
    printf("Not Found\n");
}
int main(){
    int M,N,i;
    scanf("%d",&M);
    getchar();
    for(i = 0;i < M;i++){
        scanf("%d",&a[i]);
    }
    scanf("%d",&N);
    for(i = 0;i < N;i++){
        scanf("%d",&b[i]);
    }
    for(i = 0;i < N;i++){
        search(b[i],M);
    }
    return 0;
}

1360 快速排序、kuaipai

#include <stdio.h>
#define MAX 100000
int a[MAX],n;
void show(){
    for(int i = 0;i < n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
}
void quicksort(int begin,int end){
    if(begin < end){
        int root = a[begin];
        int m = begin,n = end;
        while(m < n){
            while(m < n){
                if(a[n] < root){
                    a[m] = a[n];
                    break;
                }else{
                    n--;
                }
            }
            while(m < n){
                if(a[m] > root){
                    a[n] = a[m];
                    break;
                }else{
                    m++;
                }
            }
        }
        a[m] = root;
        show();
        quicksort(begin,m-1);
        quicksort(n+1,end);
    }
}
int main(){
    scanf("%d",&n);
    getchar();
    for(int i = 0;i < n;i++){
        scanf("%d",&a[i]);
    }
    quicksort(0,n-1);
    return 0;
}

1503 捕牛记、puniu

#include<stdio.h>
#include<string.h>
int v[1000000],p[1000000],s[1000000];
int main(){
int n,m,h,t;
while(scanf("%d%d",&n,&m)!=EOF&&n!=-1){
h=0,t=1;
memset(v,0,sizeof(v));
memset(p,0,sizeof(v));
memset(s,0,sizeof(v));
v[n]=1,p[t]=n;
while(h<t){

h++;

if(p[h]==m){

printf("%d\n",s[h]);
break;
}
if(v[p[h]-1]==0&&p[h]-1>=0)
t++,p[t]=p[h]-1,s[t]=s[h]+1,v[p[h]-1]=1;
if(v[p[h]+1]==0&&p[h]+1<=100000)
t++,p[t]=p[h]+1,s[t]=s[h]+1,v[p[h]+1]=1;
if(v[2*p[h]]==0&&2*p[h]<=100000)
t++,p[t]=2*p[h],s[t]=s[h]+1,v[2*p[h]]=1;
  } 
}
   return 0;
}

1567 中位数、zhongwei

#include <stdio.h>
#define MAX 1000000
int n;
int a[MAX],b[MAX];
int main(){
    scanf("%d",&n);
    getchar();
    for(int i = 0;i < n;i++){
        scanf("%d",&a[i]);
    }
    for(int i = 0;i < n;i++){
        scanf("%d",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值