gym 100952

A

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 #include<queue>
 8 #include<stack>
 9 #include<vector>
10 #include<set>
11 using namespace std;
12 #define PI acos(-1.0)
13 typedef long long ll;
14 typedef pair<int,int> P;
15 const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
16 const ll INF=1e13+7;
17 priority_queue<P,vector<P>,greater<P> >que;
18 struct edge
19 {
20     int from,to;
21     int cost;
22 };
23 int main()
24 {
25     int T;
26     int h1,h2,m1,m2,s1,s2;
27     scanf("%d",&T);
28     while(T--)
29     {
30         scanf("%d%d%d%d%d%d",&h1,&m1,&s1,&h2,&m2,&s2);
31         int sign=0;
32         if(h1<h2) sign=1;
33         else if(h1>h2) sign=2;
34         else
35         {
36             if(m1<m2) sign=1;
37             else if(m1>m2) sign=2;
38             else
39             {
40                 if(s1<s2) sign=1;
41                 else if(s1>s2) sign=2;
42             }
43         }
44         if(sign==1) cout<<"Player1"<<endl;
45         else if(sign==2) cout<<"Player2"<<endl;
46         else cout<<"Tie"<<endl;
47     }
48     return 0;
49 }

 

B

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 #include<queue>
 8 #include<stack>
 9 #include<vector>
10 #include<set>
11 using namespace std;
12 #define PI acos(-1.0)
13 typedef long long ll;
14 typedef pair<int,int> P;
15 const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
16 const ll INF=1e13+7;
17 priority_queue<P,vector<P>,greater<P> >que;
18 struct edge
19 {
20     int from,to;
21     int cost;
22 };
23 int main()
24 {
25     int T;
26     scanf("%d",&T);
27     while(T--)
28     {
29         int n,m;
30         scanf("%d%d",&n,&m);
31         int ans=0,cou=0,sign=1;
32         while(true)
33         {
34             if(sign>m) break;
35             cou=cou+sign;
36             ans++;
37             sign*=2;
38             if(cou>=n) break;
39         }
40         ////cout<<cou<<" "<<sign<<endl;
41         if(cou>=n) cout<<ans<<endl;
42         else
43         {
44             ans+=(n-cou)/m;
45             if((n-cou)%m) ans++;
46             cout<<ans<<endl;
47         }
48     }
49     return 0;
50 }

 

C

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 #include<queue>
 8 #include<stack>
 9 #include<vector>
10 #include<set>
11 using namespace std;
12 #define PI acos(-1.0)
13 typedef long long ll;
14 typedef pair<int,int> P;
15 const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
16 const ll INF=1e13+7;
17 priority_queue<P,vector<P>,greater<P> >que;
18 struct edge
19 {
20     int from,to;
21     int cost;
22 };
23 char s[maxn];
24 int main()
25 {
26     int T;
27     scanf("%d",&T);
28     while(T--)
29     {
30         int n,p;
31         scanf("%d%d",&n,&p);
32         getchar();
33         for(int i=1; i<=n; i++) scanf("%c",&s[i]);
34         //cout<<s+1<<endl;
35         int ans=0;
36         int l=inf,r=0;
37         for(int i=1; i<=n/2; i++)
38         {
39             if(s[i]!=s[n+1-i])
40             {
41                 l=min(l,i);
42                 r=max(r,i);
43             }
44             if(s[i]<=s[n+1-i]) swap(s[i],s[n+1-i]);
45             ans+=min(s[i]-s[n+1-i],s[n+1-i]+26-s[i]);
46         }
47         if(p>n/2) p=n+1-p;
48         if(l>r) cout<<0<<endl;
49         else
50         printf("%d\n",ans+r-l+min(abs(p-l),abs(p-r)));
51     }
52     return 0;
53 }

 

D

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <string>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <sstream>
12 #include <vector>
13 
14 using namespace std;
15 
16 typedef long long ll;
17 /****************************************/
18 const int N = 200000 + 5;
19 const int MOD = (int)1e9 + 7;
20 int F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘
21 void init(){
22     inv[1] = 1;
23     for(int i = 2; i < N; i ++){
24         inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD;
25     }
26     F[0] = Finv[0] = 1;
27     for(int i = 1; i < N; i ++){
28         F[i] = F[i-1] * 1ll * i % MOD;
29         Finv[i] = Finv[i-1] * 1ll * inv[i] % MOD;
30     }
31 }
32 int comb(int n, int m){//comb(n, m)就是C(n, m)
33     if(m < 0 || m > n) return 0;
34     return F[n] * 1ll * Finv[n - m] % MOD * Finv[m] % MOD;
35 }
36 int main(){
37     init();
38     int t,n,m,k,d;
39     scanf("%d",&t);
40     while(t--){
41         scanf("%d%d%d%d",&n,&m,&k,&d);
42         int ans=comb(n,m),x,da=0,xiao=0;
43         for(int i=0;i<n;i++){
44             scanf("%d",&x);
45             if(x>=d)da++;
46         }
47         xiao=n-da;
48         for(int i=k-1;i>=0;i--){
49             ans=(ans+MOD-(comb(da,i)*1ll*comb(xiao,m-i))%MOD)%MOD;
50         }
51         printf("%d\n",ans);
52     }
53 }

 

E

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<map>
 7 #include<queue>
 8 #include<stack>
 9 #include<vector>
10 #include<set>
11 using namespace std;
12 #define PI acos(-1.0)
13 typedef long long ll;
14 typedef pair<int,string> P;
15 const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
16 const ll INF=1e13+7;
17 priority_queue<P,vector<P>,greater<P> >q;
18 struct edge
19 {
20     int from,to;
21     int cost;
22 };
23 int n,m,t;
24 int pa[20];
25 int flag[20][20];
26 int sign[20][20];
27 int vis[20];
28 int ans=0;
29 void dfs(int x,int y,int cou)
30 {
31     //cout<<x<<" "<<y<<" "<<cou<<endl;
32     if(x>n)
33     {
34         if(cou==t) ans++;
35         return;
36     }
37     for(int k=0; k<=t; k++)
38     {
39         if(k&&vis[k]) continue;
40         if(x-1>=1&&flag[k][sign[x-1][y]]) continue;
41         if(y-1>=1&&flag[k][sign[x][y-1]]) continue;
42         sign[x][y]=k;
43         vis[k]=1;
44         dfs(y==m?x+1:x,y==m?1:y+1,k==0?cou:cou+1);
45         sign[x][y]=0;
46         vis[k]=0;
47     }
48 }
49 int main()
50 {
51     int T;
52     scanf("%d",&T);
53     while(T--)
54     {
55         scanf("%d%d%d",&n,&m,&t);
56         int p;
57         scanf("%d",&p);
58         for(int i=1; i<=t; i++) pa[i]=i;
59         memset(flag,0,sizeof(flag));
60         while(p--)
61         {
62             int a,b;
63             scanf("%d%d",&a,&b);
64             flag[a][b]=flag[b][a]=1;
65         }
66         ans=0;
67         memset(vis,0,sizeof(vis));
68         memset(sign,0,sizeof(sign));
69         dfs(1,1,0);
70         if(ans==0) cout<<"impossible"<<endl;
71         else cout<<ans<<endl;
72     }
73     return 0;
74 }

 

F

  1 #include <iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<cstring>
  5 #include<algorithm>
  6 #include<map>
  7 #include<queue>
  8 #include<stack>
  9 #include<vector>
 10 #include<set>
 11 using namespace std;
 12 #define PI acos(-1.0)
 13 typedef long long ll;
 14 typedef pair<int,string> P;
 15 const int maxn=1e5+100,maxm=1e5+100,inf=0x3f3f3f3f,mod=1e9+7;
 16 const ll INF=1e13+7;
 17 priority_queue<P,vector<P>,greater<P> >q;
 18 struct edge
 19 {
 20     int from,to;
 21     int cost;
 22 };
 23 map<string,map<string,int> >G;
 24 map<string,int>dist;
 25 struct node
 26 {
 27     string str;
 28     int ss;
 29 }N[305];
 30 bool cmp(struct node aa,struct node bb)
 31 {
 32     if(aa.ss!=bb.ss)
 33     return aa.ss<bb.ss;
 34     else
 35     return aa.str<bb.str;
 36 }
 37 void dij(string s)
 38 {
 39     dist[s]=0;
 40     q.push(P(dist[s],s));
 41     while(!q.empty())
 42     {
 43         P p=q.top();
 44         q.pop();
 45         string u=p.second;
 46         map<string,int> ::iterator it;
 47         for(it=G[u].begin(); it!=G[u].end(); it++)
 48         {
 49             if((*it).second==0) continue;
 50             //cout<<(*it).first<<" "<<(*it).second<<endl;
 51             string v=(*it).first;
 52             if(dist[v]>dist[u]+1)
 53             {
 54                 dist[v]=dist[u]+1;
 55                 q.push(P(dist[v],v));
 56             }
 57         }
 58     }
 59 }
 60 int main()
 61 {
 62     int T;
 63     scanf("%d",&T);
 64     while(T--)
 65     {
 66         int n;
 67         scanf("%d",&n);
 68         string s="Ahmad";
 69         G.clear();
 70         dist.clear();
 71         int jishu=0;
 72         for(int i=1; i<=n; i++)
 73         {
 74             string a,b,c;
 75             cin>>a>>b>>c;
 76             if(dist[a]==0){
 77                 N[jishu++].str=a;
 78                 dist[a]=inf;
 79                 }
 80                   if(dist[b]==0){
 81                 N[jishu++].str=b;
 82                 dist[b]=inf;
 83                 }
 84                   if(dist[c]==0){
 85                 N[jishu++].str=c;
 86                 dist[c]=inf;
 87                 }
 88             G[a][b]=G[b][a]=G[b][c]=G[c][b]=G[a][c]=G[c][a]=1;
 89         }
 90         dij(s);
 91         cout<<jishu<<endl;
 92         for(int i=0;i<jishu;i++)
 93             N[i].ss=dist[N[i].str];
 94         sort(N,N+jishu,cmp);
 95         for(int i=0;i<jishu;i++){
 96              if(N[i].ss>=inf)
 97                 cout<<N[i].str<<" "<<"undefined"<<endl;
 98               else
 99             cout<<N[i].str<<" "<<N[i].ss<<endl;
100             }
101     }
102     return 0;
103 }

 

G

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <string>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <sstream>
12 #include <vector>
13 #define PI acos(-1.0)
14 #define N 5e6+10
15 #define M 1000000007
16 #define inf 1e9
17 #define eps 1e-8
18 #define dazhi 2147483647
19 using namespace std;
20 
21 typedef long long ll;
22 
23 ll pow(ll a,ll b,ll p){ll sum=1;for(a%=p;b;a=a*a%p,b>>=1)if(b&1)sum=sum*a%p;return sum;}
24 ll phi(ll n){ll i,re=n;for(i=2;i*i<=n;i++)if(n%i==0){re=re/i*(i-1);while(n%i==0)n/=i;}if(n>1)re=re/n*(n-1);return re%M;}
25 void exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return;}exgcd(b,a%b,y,x);y-=x*(a/b);}
26 ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
27 
28 /****************************************/
29  int main()
30  {
31 
32      int t,n;
33      scanf("%d",&t);
34      while(t--)
35      {
36          scanf("%d",&n);
37          if(n==1)printf("Bob\n");
38          else printf("Alice\n");
39      }
40  }

 

H

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<cstring>
  5 #include<algorithm>
  6 #include<map>
  7 #include<queue>
  8 #include<stack>
  9 #include<vector>
 10 #include<bitset>
 11 #include<set>
 12 #define ll __int64
 13 #define mod 100000000
 14 #define N 5e6+10
 15 #define M 1e
 16 using namespace std;
 17 ll a[255]={ 
 18 1
 19 ,2
 20 ,2
 21 ,4
 22 ,3
 23 ,7
 24 ,5
 25 ,11
 26 ,8
 27 ,17
 28 ,12
 29 ,26
 30 ,18
 31 ,37
 32 ,27
 33 ,54
 34 ,38
 35 ,76
 36 ,54
 37 ,106
 38 ,76
 39 ,145
 40 ,104
 41 ,199
 42 ,142
 43 ,266
 44 , 192
 45 , 357,
 46  256,
 47  472,
 48  340,
 49  621,
 50  448,
 51  809,
 52  585,
 53  1053,
 54  760,
 55  1354,
 56  982,
 57  1740,
 58  1260,
 59  2218,
 60  1610,
 61  2818,
 62  2048,
 63  3559,
 64  2590,
 65  4485,
 66  3264,
 67 5616,
 68 4097,
 69  7018,
 70  5120,
 71  8728,
 72  6378,
 73  10826,
 74  7917,
 75  13373,
 76  9792,
 77 16484,
 78  12076,
 79  20236,
 80  14848,
 81  24793,
 82  18200,
 83  30275,
 84  22250,
 85  36886,
 86  27130,
 87  44810,
 88  32992,
 89  54329,
 90  40026,
 91  65683,
 92  48446,
 93  79265,
 94  58499,
 95  95419,
 96  70488,
 97  114650,
 98  84756,
 99  137447,
100  101698,
101  164496,
102  121792,
103  196445,
104  145578,
105  234221,
106  173682,
107  278720,
108  206848,
109  331143,
110  245920,
111  392722,
112  291874,
113  465061,
114  345856,
115  549781,
116  409174,
117  649019,
118 483330,
119  764959,
120  570078,
121  900373,
122  671418,
123  1058191,
124  789640,
125  1242061,
126  927406,
127  1455820,
128  1087744,
129  1704261,
130  1274118,
131  1992458,
132  1490528,
133  2326608,
134  1741521,
135  2713398,
136  2032290,
137  3160899,
138  2368800,
139  3677789,
140  2757826,
141  4274556,
142  3207086,
143  4962526,
144  3725410,
145  5755174,
146  4322816,
147  6667228,
148  5010688,
149  7716070,
150  5802008,
151  8920663,
152  6711480,
153  10303379,
154  7755776,
155  11888671,
156  8953856,
157  13705118,
158  10327156,
159  15784173,
160  11899934,
161  18162385,
162  13699699,
163  20879933,
164  15757502,
165  23983452,
166  18108418,
167  27524280,
168  20792120,
169  31561603,
170  23853318,
171  36160845,
172  27342421,
173  41397124,
174  31316314,
175  47353396,
176  35839008,
177  54124796,
178  40982540,
179  61816437,
180  46828032,
181  70548311,
182  53466624,
183  80453313,
184  61000704,
185  91682668,
186  69545358,
187  104403741,
188  79229676,
189  118806744,
190  90198446,
191  135102223,
192  102614114,
193  153528658,
194  116658616,
195  174350347,
196  132535702,
197  197865953,
198  150473568,
199  224406247,
200  170727424,
201  254344551,
202  193582642,
203  288094273,
204  219358315,
205 326120818,
206  248410816,
207  368939881,
208  281138048,
209  417130912,
210  317984256,
211  471335560,
212  359444904,
213  532274004,
214  406072422,
215  600743477,
216  458482688,
217  677637038,
218  517361670,
219  763943462,
220  583473184,
221  860768675,
222  657667584,
223  969336374,
224  740890786,
225  1091013811,
226  834194700,
227  1227313238,
228  938748852,
229  1379921672,
230  1055852590,
231  1550704877,
232  1186949056,
233  1741741564,
234  1333640710,
235  1955329266,
236  1497705768,
237  2194025352,
238  1681116852,
239  2460655086,
240  1886061684,
241  2758359212,
242  2114965120,
243  3090606588,
244  2370513986,
245  3461249193,
246  2655684608,
247  3874538905,
248  2973772212,
249  4335193118,
250  3328423936,
251  4848416380,
252  3723675326,
253  5419976831,
254  4163989458,
255  6056235989,
256  4654300706,
257  6764237552,
258  5200062976,
259  7551745299,
260  5807301632,
261  8427348786,
262  6482671322,
263  9400510845,
264  7233519619,
265  10481691022,
266  8067955712,
267  11682407480};
268 int  main()
269 {  int n;
270     while(scanf("%d",&n)!=EOF){
271         if(n==0)
272             break;
273         printf("%I64d\n",a[n-1]);
274     }
275     return  0;
276 }

 

I

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <string>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <map>
 8 #include <set>
 9 #include <stack>
10 #include <sstream>
11 #include <vector>
12 #define PI acos(-1.0)
13 #define N 111111
14 #define M 1000000007
15 #define inf 1e9
16 #define eps 1e-8
17 #define dazhi 2147483647
18 using namespace std;
19 
20 typedef unsigned long long ll;
21 
22 ll pow(ll a,ll b,ll p){ll sum=1;for(a%=p;b;a=a*a%p,b>>=1)if(b&1)sum=sum*a%p;return sum;}
23 ll phi(ll n){ll i,re=n;for(i=2;i*i<=n;i++)if(n%i==0){re=re/i*(i-1);while(n%i==0)n/=i;}if(n>1)re=re/n*(n-1);return re%M;}
24 void exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return;}exgcd(b,a%b,y,x);y-=x*(a/b);}
25 ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
26 
27 /****************************************/
28 
29 ll b[N];
30 int main()
31 {
32     //ll x,y,t=0;
33     int n,x,y,t=0;
34     while(scanf("%d%d%d",&n,&x,&y)!=EOF){
35     t++;
36     if(n==0&&x==0&&y==0)break;
37     for(int i=1;i<=n;i++){
38         scanf("%lld",&b[i]);
39     }
40     for(int i=0;i<n;i++)
41         scanf("%lld",&b[n+n-i]);
42     if(x==2)y=2*n-y+1;
43     ll xiao=1e14,biao;
44     for(int i=y;i<=2*n;i++){
45         //xiao=min(xiao,b[i]);
46         if(b[i]<xiao)xiao=b[i],biao=i;
47     }
48     for(int i=1;i<y;i++){
49         if(b[i]<xiao)xiao=b[i],biao=i;
50     }
51     ll ans=0;
52     if(biao<y){
53         for(int i=1;i<=2*n;i++)
54             b[i]-=xiao+1,ans+=xiao+1;
55         for(int i=biao;i<y;i++)
56             b[i]++,ans--;
57     }
58     else{
59         for(int i=1;i<=2*n;i++)
60             b[i]-=xiao,ans+=xiao;
61         for(int i=y;i<biao;i++)
62             b[i]--,ans++;
63     }
64     b[biao]=ans;
65     printf("Case %d:\n",t);
66     if(biao<=n){
67         printf("INVALID\n");
68         continue;
69     }
70     for(int i=1;i<=n;i++){
71         printf("%lld ",b[i]);
72     }
73     cout<<endl;
74     for(int i=0;i<n;i++)
75     {
76          printf("%lld ",b[n+n-i]);
77     }
78     cout<<endl;
79     }
80 }

 

J

  1 #pragma comment(linker, "/STACK:102400000,102400000")
  2 #include <cstdio>
  3 #include <iostream>
  4 #include <cstdlib>
  5 #include <cstring>
  6 #include <algorithm>
  7 #include <cmath>
  8 #include <cctype>
  9 #include <map>
 10 #include <set>
 11 #include <queue>
 12 #include <bitset>
 13 #include <string>
 14 #include <complex>
 15 using namespace std;
 16 typedef pair<int,int> Pii;
 17 typedef long long LL;
 18 typedef unsigned long long ULL;
 19 typedef double DBL;
 20 typedef long double LDBL;
 21 #define MST(a,b) memset(a,b,sizeof(a))
 22 #define CLR(a) MST(a,0)
 23 #define SQR(a) ((a)*(a))
 24 #define PCUT puts("\n----------")
 25 
 26 const int maxn=500+10;
 27 const DBL eps=1e-8;
 28 int sgn(DBL x){return x>eps? 1: (x<-eps? -1: 0);}
 29 struct Vector
 30 {
 31     DBL x,y;
 32     Vector(DBL _x=0, DBL _y=0):x(_x),y(_y){}
 33     Vector operator + (const Vector &rhs) const {return Vector(x+rhs.x, y+rhs.y);}
 34     Vector operator - (const Vector &rhs) const {return Vector(x-rhs.x, y-rhs.y);}
 35     Vector operator * (const DBL &rhs) const {return Vector(x*rhs, y*rhs);}
 36     Vector operator / (const DBL &rhs) const {return Vector(x/rhs, y/rhs);}
 37     DBL operator * (const Vector &rhs) const {return x*rhs.x + y*rhs.y;}
 38     DBL operator ^ (const Vector &rhs) const {return x*rhs.y - rhs.x*y;}
 39     int read(){return scanf("%lf%lf", &x, &y);}
 40 };
 41 typedef Vector Point;
 42 
 43 struct Line
 44 {
 45     Point u,v;
 46     Line(){}
 47     Line(Point _u,Point _v):u(_u),v(_v){}
 48 };
 49 int N,M;
 50 Point A[maxn], B[maxn];
 51 DBL Area(int,Point*);
 52 DBL CPIA(Point*,Point*,int,int);
 53 DBL SPIA(Point*,Point*,int,int);
 54 
 55 int main()
 56 {
 57   int t;
 58   scanf("%d",&t);
 59   for(int p=1;p<=t;p++){
 60         scanf("%d%d", &N, &M);
 61         for(int i=0; i<N; i++) A[i].read();;
 62         for(int i=0; i<M; i++) B[i].read();
 63         printf("%.4f\n",SPIA(A,B,N,M));
 64   }
 65     return 0;
 66 }
 67 
 68 DBL Area(int siz, Point p[])
 69 {
 70     DBL res=0;
 71     for(int i=1; i<siz; i++) res += (p[i-1]^p[i]);
 72     res += (p[siz-1]^p[0]);
 73     return abs(res*0.5);
 74 }
 75 
 76 Point GetLineIntSec(Line l1, Line l2)
 77 {
 78     DBL a = (l1.v-l1.u)^(l2.u-l1.u), b = (l1.u-l1.v)^(l2.v-l1.v);
 79     if(sgn(a+b)==0) return Point(1e9,1e9);
 80     return Point((l2.u.x * b + l2.v.x * a) / (a + b), (l2.u.y * b + l2.v.y * a) / (a + b));
 81 }
 82 
 83 DBL CPIA(Point a[], Point b[], int na, int nb)
 84 {
 85     Point p[20], tmp[20]; // na,nb <=20
 86     int i, j, tn, sflag, eflag;
 87     a[na] = a[0], b[nb] = b[0];
 88     memcpy(p,b,sizeof(Point)*(nb + 1));
 89     for(i = 0; i < na && nb > 2; i++)
 90     {
 91         sflag = sgn((a[i+1]-a[i])^(p[0]-a[i]));
 92         for(j = tn = 0; j < nb; j++, sflag = eflag)
 93         {
 94             if(sflag>=0) tmp[tn++] = p[j];
 95             eflag = sgn( (a[i + 1]-a[i])^(p[j + 1]-a[i]));
 96             if((sflag ^ eflag) == -2)
 97                 tmp[tn++] = GetLineIntSec( Line(a[i], a[i + 1]) , Line(p[j], p[j + 1]));
 98         }
 99         memcpy(p, tmp, sizeof(Point) * tn);
100         nb = tn, p[nb] = p[0];
101     }
102     if(nb < 3) return 0.0;
103     return Area(nb, p);
104 }
105 
106 DBL SPIA(Point a[], Point b[], int na, int nb)
107 {
108     int i, j;
109     Point t1[4], t2[4];
110     double res = 0, num1, num2;
111     a[na] = t1[0] = a[0], b[nb] = t2[0] = b[0];
112     for(i = 2; i < na; i++)
113     {
114         t1[1] = a[i-1], t1[2] = a[i];
115         num1 = sgn( (t1[1]-t1[0])^(t1[2]-t1[0]));
116         if(num1 < 0) swap(t1[1], t1[2]);
117         for(j = 2; j < nb; j++)
118         {
119             t2[1] = b[j - 1], t2[2] = b[j];
120             num2 = sgn((t2[1]-t2[0])^(t2[2]-t2[0]));
121             if(num2 < 0) swap(t2[1], t2[2]);
122             res += CPIA(t1, t2, 3, 3) * num1 * num2;
123         }
124     }
125     return res;
126 }