某神的代码:
#include<stdio.h>
#define max(x,y) (x)>(y)?(x):(y)
#define min(x,y) (x)<(y)?(x):(y)
const int inf=0x7fffffff;struct node // Fruit
{int adv;int x[11],y[11];
}Fruit[11];int Fruit_num,ans;//----
int judge( int x1,int y1,int x2,int y2,int x,int y )
{return ( ( x1-x )*( y2-y ) - ( x2-x )*( y1-y ) );
}
bool on_megment( int x1,int y1,int x2,int y2,int x3,int y3 )
{int t1=x1-x3;int t2=y1-y3;int t3=x1-x2;int t4=y1-y2;if( ( t1*t4-t2*t3 )==0 )return true;else return false;
}
bool megment( int x1,int y1,int x2,int y2,int p1,int q1,int p2,int q2 )
{if( on_megment( p1,q1,p2,q2,x1,y1 )|| on_megment( p1,q1,p2,q2,x2,y2 ) )return true;int d1=judge( p1,q1,p2,q2,x1,y1 );int d2=judge( p1,q1,p2,q2,x2,y2 );if( d1*d2<0 ) return true;return false;
}//---/*
bool megment1( int p1,int q1,int p2,int q2, int x1,int y1,int x2,int y2 )
{if ( x1 != x2 ) // k exsit{double a = (y1-y2)/(x1-x2);double b = y1;if( a*p1+b < q1 && a*p2+b < q2 || a*p1+b > q1 && a*p2+b > q2 ) return false;return true; } else{if( p1 > x1 && p2 > x2 || p1 < x1 && p2 < x2) return false;return true;}
}*/
void getFruit()
{for(int i = 1; i <= Fruit_num; ++i ){scanf("%d",&(Fruit[i].adv) ); for(int j = 1; j <= Fruit[i].adv; ++j ){scanf("%d%d",&(Fruit[i].x[j]),&(Fruit[i].y[j])); } }
}void Search()
{for(int i = 1; i <= Fruit_num; ++i ) // 选取任意两个水果 for( int j = i+1; j <= Fruit_num; ++j ){for(int a = 1; a <= Fruit[i].adv; ++a ) //第一个水果顶点{ for(int b = 1; b <= Fruit[j].adv; ++b ) //第二个水果顶点 作为直线 {int x1 = Fruit[i].x[a], y1 = Fruit[i].y[a];int x2 = Fruit[j].x[b], y2 = Fruit[j].y[b]; int cut_num = 2;for( int c = 1; c <= Fruit_num; ++c ) //对剩余的水果进行枚举比较 {if( c == i || c == j ) continue; bool flag = false;int d;for( d = 1; d < Fruit[c].adv; ++d )//选取相邻两顶点 {if(flag) continue;if( megment(Fruit[c].x[d],Fruit[c].y[d],Fruit[c].x[d+1],Fruit[c].y[d+1] ,x1,y1,x2,y2 ) )flag = true; }if( megment(Fruit[c].x[d],Fruit[c].y[d],Fruit[c].x[1],Fruit[c].y[1],x1,y1,x2,y2 ) )flag = true; if(flag) cut_num++;}ans = max(ans,cut_num);}}}
}int main()
{int t, Case = 1;scanf("%d",&t);while(t--){scanf("%d",&Fruit_num); getFruit(); //Input the Fruit.ans = 0;Search(); //Search the Max numbers of Fruit.if( Fruit_num == 1 ) printf("Case %d: %d\n",Case++,1);elseprintf("Case %d: %d\n",Case++,ans);} return 0;
}