锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓涓嚫澶氳竟褰<=10000錛宑ut浜唌嬈★紝姣忎竴鍒涓嶇浉浜?br /> 姹傝竟鏁版渶澶氶偅鍧楃殑杈規暟
榪欓鐢ㄩ敊璇殑鍋氭硶鎼炰簡寰堜箙錛屾氮璐瑰ぇ閲忔椂闂達紝鍥?img src="http://www.shnenglu.com/Images/dot.gif" alt="" />
鐒跺悗媧楁盡鏃舵兂鍒頒簡鍙互閫氳繃姣忔鎵句竴涓?#8220;鏈灝忕殑鐜?#8221;鏉ュ仛
綾諱技錛?br /> http://watashi.ws/blog/970/andrew-stankevich-3-solution/
zoj 2361
涓婇潰榪欓鍗佸垎鎺ㄨ崘錛侊紒錛?br />
涓婇潰閭i鏄寜鐓ф瀬瑙掓帓搴忥紝涓嶈繃榪欓鍙互鎸夌収鐐圭殑緙栧彿鎺掑簭鍗沖彲
澶氳竟褰㈢殑欏剁偣鐪嬫垚鍥劇殑欏剁偣錛屽杈瑰艦鐨勮竟鏄竟錛宑ut涔熺湅鎴愯竟錛堝弻鍚戠殑杈癸級
寤哄ソ鍥懼悗錛屽姣忎釜鐐規壘瀹冩墍鍦ㄧ殑鐜紙鍙兘澶氫釜錛?br /> 姣斿鐜板湪宸茬粡鏈夎竟pre->now錛岄偅涔堝氨鍦╪ow鐨勯偦鎺ヨ竟涓壘絎竴涓瘮pre灝忕殑鐐?br /> 錛堟病鏈夌殑璇濓紝灝辨渶澶ч偅涓級
榪欐牱錛岃蛋鍑虹殑鐜氨鏄渶灝忕殑浜嗭紙涔熷嵆鐜唴娌℃湁杈癸級
鐢諱釜鍥懼氨娓呮浜?br /> 8 4
2 8
2 4
4 6
6 8
*/
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<set>
#include<list>
#include<numeric>
#include<cassert>
#include<sstream>
#include<ctime>
#include<bitset>
#include<functional>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 10086;
vector<int> e[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
for (int N, M; ~scanf("%d%d", &N, &M); ) {
for (int i = 1; i <= N; i++) {
e[i].clear();
e[i].push_back(i == N ? 1 : i+1);
//e[i].push_back(i == 1 ? N : i-1);榪欐潯杈逛笉鐢ㄥ姞
}
int x, y;
for (int i = 0; i < M; i++) {
scanf("%d%d", &x, &y);
if (x > y) swap(x, y);
//鍙屽悜鐨勮竟
e[x].push_back(y);
e[y].push_back(x);
}
for (int i = 1; i <= N; i++) {
sort(e[i].begin(), e[i].end());
}
int ans = 0;
for( int i = 1; i <= N; i++) {
//cout<<endl<<i<<": \n";
for (vector<int>::iterator it = e[i].begin(), jt; it != e[i].end(); ) {
int pre = i, now = *it, len = 1;
//姣忔鍦╪ow涓鎵劇涓涓皬浜巔re鐨勶紝榪欐牱灝辨槸鏈灝忕殑鐜簡錛岀被浼兼瀬瑙掓渶灝?/span>
while (now != i) {
//cout<<pre<<" "<<now<<endl;
len ++;
jt = lower_bound(e[now].begin(), e[now].end(), pre);
//涓嶈兘鍐欐垚--jt < e[now].begin()錛屽洜涓?-jt涓嶅啀灞炰簬e[now]鐨勮寖鍥翠簡
if (jt == e[now].begin()) {
jt = --e[now].end();
} else jt --;
pre = now;
now = *jt;
e[pre].erase(jt);
}
it = e[i].erase(it);
//cout<<len<<endl;
ans = max(ans, len);
}
}
printf("%d\n", ans);
}
return 0;
}
]]>/**//*
棰樻剰錛氭眰鏄惁瀛樺湪涓鏉$洿綰匡紝浣挎墍鏈夌嚎孌靛埌榪欐潯鐩寸嚎鐨勬姇褰辮嚦灝戞湁涓涓氦鐐?br>
鍙互鍦ㄥ叡鍚屾姇褰卞浣滃師鐩寸嚎鐨勫瀭綰匡紝鍒欒鍨傜嚎涓庢墍鏈夌嚎孌甸兘鐩鎬氦
<==> 鏄惁瀛樺湪涓鏉$洿綰夸笌鎵鏈夌嚎孌甸兘鐩鎬氦
鍙互鏋氫婦綰挎鐨勭鐐逛綔涓虹洿綰跨殑錛堟敞鎰忓鏋滅浉鍚屾瀯涓嶆垚鐩寸嚎錛?br>
鐒跺悗鍒ゆ柇鎵鏈夌嚎孌墊槸鍚﹂兘涓庝箣鐩鎬氦
榪欑鍋氭硶鎴戜篃涓嶆槸寰堟噦錛屽彲鑳借繖鏉$洿綰胯兘灝嗘墍鏈夌偣鍒嗘垚浣嶄簬鐩寸嚎涓ょ鐨勪袱閮ㄥ垎鍚?br>
*/
#include<cstdio>
#include<cstdlib>
#include<cmath>
const double esp=1e-8;
const int MAXN=210;
struct Point
{
double x,y;
}points[MAXN];
bool isEqual(double &a,double &b)
{
return fabs(a-b)<esp;
}
double mul(Point &a,Point &b,Point &o)
{
return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);
}
int main()
{
//freopen("in","r",stdin);
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=2*n;i+=2)
scanf("%lf%lf%lf%lf",&points[i].x,&points[i].y,&points[i+1].x,&points[i+1].y);
bool flag=false;
for(int i=1;i<=2*n&&!flag;i++)//enum line
for(int j=1;j<=2*n;j++)
{
Point p1=points[i],p2=points[j];
if(isEqual(p1.x,p2.x)&&isEqual(p1.y,p2.y))continue;
//chk
int k;
for(k=1;k<=2*n;k+=2)
if(mul(points[k],p1,p2)*mul(points[k+1],p1,p2)>esp)break;
if(k>=2*n)
{flag=true;break;}
}
printf(flag?"Yes!\n":"No!\n");
}
return 0;
}
]]>