NYOJ-幸运三角形

Posted 赤云封天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ-幸运三角形相关的知识,希望对你有一定的参考价值。

太坑!  打表的时候仔细点。

打表代码:

 1 #include <stdio.h>
 2 #include <memory.h>
 3 #include <math.h>
 4 int cnt,n;
 5 int cnt_of_1,cnt_of_0;
 6 int ok;///记录完美三角形的个数
 7 void next(char a[],int m){///完成大数+1,(从后算)
 8     ///大数 + 1
 9     a[m-1]++;
10     int j = m-1;
11     while(a[j] > 1){
12         a[j] = 0;
13         a[j-1]++;
14         j--;
15     }
16 }
17 void count(char a[],int m){
18     ///统计个数
19     for(int j = m-1; j >= 0; --j){
20         if(a[j] == 1)
21             cnt_of_1++;
22         else
23             cnt_of_0++;
24     }
25 }
26 void dfs(char a[],int m){///由字符串 a 推出字符串 b; m为字符串a的长度
27     count(a,m);
28     if(cnt_of_1 > cnt / 2 || cnt_of_0 > cnt / 2 || m < 0)
29         return ;
30     if(m == 1 &&cnt_of_0 == cnt_of_1){
31         ok++;
32         return ;
33     }
34     for(int i = 0; i < m-1; i++){
35         a[i] = (a[i] == a[i+1]) ? 1 : 0;
36     }
37     dfs(a,m-1);
38 }
39 int main(void){
40     char a[25],b[25];
41     while(scanf("%d",&n) != EOF){
42         cnt = n*(1+n)/2;
43         if(cnt % 2 == 1){
44             printf("0\n");
45             continue;
46         }
47         ok=0;
48         memset(b,0,25*sizeof(int));
49         for(int i = pow(2,n); i > 0; i--){
50             for(int j = 0; j < n; j++)
51                 a[j] = b[j];
52             cnt_of_0 = cnt_of_1 = 0;
53             dfs(a,n);
54             next(b,n);///查找a+1
55         }
56         printf("%d\n",ok);
57     }
58     return 0;
59 }

提交代码:

 1 #include <stdio.h>
 2 int a[25]={0, 0, 0, 4, 6, 0, 0, 12, 40, 0, 0, 171, 410, 0, 0,
 3             1896, 5160, 0, 0, 32757, 59984, 0, 0, 431095, 822229};
 4 int main(void){
 5     int n;
 6     while(scanf("%d",&n) != EOF){
 7         printf("%d\n",a[n]);
 8     }
 9     return 0;
10 }

 

以上是关于NYOJ-幸运三角形的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ 815 三角形海伦公式

nyoj-659-推断三角形(大坑)

nyoj 67

NYOJ 1009 So Easy[Ⅰ]简单题

nyoj 952 : 最大四边形 (计算几何)

nyoj 274-正三角形的外接圆面积 (R = PI * a * a / 3)