#include <stdio.h> #include <stdlib.h> #include <math.h> void match(int *a,int*b,int m,int n,int k); void inc(int *b,int L,int R,int m); int num = 0; int main() {     int m,n,k,L,R;     printf("m,n=");     scanf("%d %d",&m,&n);     printf("k = ");     scanf("%d",&k);     printf("L,R=");     scanf("%d %d",&L,&R);     int *a = (int*)malloc(n*sizeof(int));     int *b = (int*)malloc(m*sizeof(int));     int i=0;     for(i = 0; i<m; i++)     {         b[i] = L;     }     for(i = 0; i<n; i++)     {         scanf("%d",&a[i]);     }     for(i = 0; i<pow(R-L+1,m); i++)     {         int j;         /*for(j= 0;j<n;j++){          printf("a = %d ",a[j]);         }         printf("\n"); */         match(a,b,m,n,k);         inc(b,L,R,m);     }     printf("%d\n",num); } void match(int *a,int*b,int m,int n,int k) {     int i,j=0,temp,count=0;     if(n<m)     {         for(i =0; i<n; i++)         {             for(; j<m; j++)             {                 //printf("%d,%d\n",a[i],b[j]);                 if(a[i] == b[j])                 {                     count++;                     j++;                     temp = j;                     break;                 }             }             if(count == k)                 break;             if(j == n && i < m-1)                 j = temp;             else if(j == n)                 break;         }     }     else     {         for(i =0; i<m; i++)         {             for(; j<n; j++)             {                 //printf("%d,%d\n",a[i],b[j]);                 if(a[j] == b[i])                 {                     count++;                     j++;                     temp = j;                     break;                 }             }             if(count == k)                 break;             if(j == n && i < m-1)                 j = temp;             else if(j == n)                 break;         }     }     if(count == k)     {         for(i=0; i<m; i++)         {             printf("%d ",b[i]);         }         printf("\n");         num += 1;     } } void inc(int *b,int L,int R,int m) {     static int i = -1;     if(i == -1)     {         i = m - 1;     }     if(b[i] == R)     {         b[i] = L;         i -= 1;         inc(b,L,R,m);         i = m - 1;     }     else b[i] += 1; } 
点赞 1

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客企业服务