bzoj 1800: [Ahoi2009]fly 飞行棋

找圆就是矩形对角线(不知道本蒟蒻的垃圾大暴力为什么不对。。)

 1 /*#include<bits/stdc++.h>
 2 #define N 200005
 3 #define LL long long
 4 #define inf 0x3f3f3f3f
 5 #define ls tr[x][0]
 6 #define rs tr[x][1]
 7 using namespace std;
 8 inline int ra()
 9 {
10     int x=0,f=1; char ch=getchar();
11     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
12     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
13     return x*f;
14 }
15 int a[50];
16 int main()
17 {
18     int n=ra(),tot=0,ans=0;
19     for (int i=1; i<=n; i++) a[i]=ra(),tot+=a[i];
20     if (tot%2) {
21         cout<<"0";
22         return 0;
23     }
24     for (int i=n+1; i<=2*n; i++) a[i]=a[i-n];
25     for (int k=1; k<n; k++)
26         for (int i=1; i<=n; i++)
27         {
28             int sum=0;
29             for (int j=i; j<=i+k-1; j++) sum+=a[j];
30             if (2*sum>=tot || (tot-2*sum)%2) break;  //break改成continue就AC2333 
31             int orz=(tot-2*sum)/2,sum1=0;
32             for (int j=i+k; j<=2*n; j++)
33             { 
34                 sum1+=a[j];
35                 if (sum1==orz) 
36                 {
37                     int sum2=0;
38                     for (int l=j+1; l<=2*n; l++)
39                     {
40                         sum2+=a[l];
41                         if (sum2==sum) ans++;
42                         if (sum2>sum) break;
43                     }
44                 }
45                 if (sum1>orz) break;
46             }
47         //    cout<<ans<<"!!";system("pause");
48         }
49     cout<<ans/4;
50     return 0;
51 }*/
52 #include<bits/stdc++.h>
53 #define N 200005
54 #define LL long long
55 #define inf 0x3f3f3f3f
56 #define ls tr[x][0]
57 #define rs tr[x][1]
58 using namespace std;
59 inline int ra()
60 {
61     int x=0,f=1; char ch=getchar();
62     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
63     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
64     return x*f;
65 }
66 int a[50];
67 int main()
68 {
69     int n=ra(),tot=0,ans=0;
70     for (int i=1; i<=n; i++) a[i]=ra(),tot+=a[i];
71     if (tot%2) {
72         cout<<"0";
73         return 0;
74     }
75     for (int i=1; i<=n; i++)
76     {
77         int sum=0;
78         for (int j=i+1; j<=n; j++)
79         {
80             sum+=a[j];
81             if (sum==tot/2) ans++;
82         }
83     }
84     cout<<(ans*(ans-1)>>1);
85     return 0;
86 }
原文地址:https://www.cnblogs.com/ccd2333/p/6482438.html