Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #define MAX 10
- #define in "in.txt"
- #define out "out.txt"
- void split(char s[], char s1[], char s2[])
- {
- int l, m;
- int i,j;
- l = strlen(s);
- m = l/2;
- for (i = 0; i < m; ++i)
- {
- s1[i] = s[i];
- //s2[i] = s[l - m + i]; // can't use to split s2
- }
- s1[i] = '\0';
- for (i = m; i < l; ++i)
- {
- s2[i-m] = s[i];
- }
- s2[i-m] = '\0';
- }
- int numofA(char s[])
- {
- int count;
- count = 0;
- for (int i = 0; i < strlen(s); ++i)
- {
- if(s[i] == 'A')
- count++;
- }
- return count;
- }
- int max(int x, int y)
- {
- int result;
- if(x > y)
- result = x;
- else
- result = y;
- return result;
- }
- int hash(char s[])
- {
- int result;
- char s1[MAX], s2[MAX];
- result = numofA(s);
- if(strlen(s) > 1)
- {
- split(s,s1,s2);
- result += max(hash(s1),hash(s2));
- }
- return result;
- }
- int dp(int v, int a, int e)
- {
- int n;
- int result = 0;
- int a1,e1,v1,a2,e2,v2;
- n = a+e;
- for (a1 = 0; a1 <= a; ++a1)
- {
- a2 = a - a1;
- e2 = n/2-a2;
- e1 = e - e2;
- for (v1 = 0; v1 <= v-a; ++v1)
- {
- for (v2 = 0; v2 < v-a; ++v2)
- {
- if (max(v1,v2) == v-a)
- {
- result+=dp(v1,a1,e1)*dp(v2,a2,e2);
- }
- }
- }
- }
- return result;
- }
- void writefile(int res, int ndp)
- {
- FILE *f;
- f = fopen(out,"wt");
- if(f==NULL)
- {
- printf("Khong tao duoc file\n");
- exit(0);
- }
- fprintf(f, "%d\n", res);
- fclose(f);
- }
- void readfile2handle()
- {
- FILE *f;
- int n;
- int a,e,v;
- int result;
- f = fopen(in,"rt");
- if(f==NULL)
- {
- printf("Khong doc duoc file\n");
- exit(0);
- }
- fscanf(f,"%d",&n); // not scanf \n and backspace
- for (int i = 0; i < n; ++i)
- {
- fscanf(f, "%d\l", &a);
- fscanf(f, "%d\l", &e);
- fscanf(f, "%d\l", &v);
- result = dp(v,a,e);
- writefile(result,n);
- }
- fclose(f);
- }
- int main(int argc, char const *argv[])
- {
- readfile2handle();
- //printf("%d\n", dp(4,2,8));
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment