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",