這道題作為一道省選題,質量真是差到了極點!!強烈建議千萬不要去做!
首先,這題意與資料不合,而樣例怎麼看都是錯的,反豬明明有6張無懈!
題意與資料之齟齬:
①題目中n<=5,而實際上n<=10.
②題目中明確指出不會出現牌不夠用的情況,而實際上你需要不斷地抽最後一張牌。
也就是說,如果你按照題目要求寫的話,你的最終得分將是:30分。。。(←_←這種題考場上能有人a才怪。)
而如果你rp爆發把陣列開到10,那麼你就能拿90分。。
我寫的時候沒有考慮到的地方:
①裝諸葛連弩可能導致前面出殺。
②與他人決鬥可能導致自己死亡,此時應及時中止出牌階段!!←←←←此處最大坑點。
③反豬的決鬥永遠是獻給主豬的(而不是什麼逆時針第乙個。。)。
④題目中的距離與平常意義上的距離不一樣!是逆時針旋轉的距離!
犯的一些sb錯誤:
①把》0寫成》9.
②把pig[j].id<0寫成j<0.
③企圖用break退出switch的外層迴圈(實際上只能退switch,而如果是if的話這麼做是可以退到迴圈的)。
**(循題面拿30分):
#includeusing namespace std;
#include#include#include#include#include#include#includestruct lspl[5000];
int tot;
struct pspig[5];
int pred[5],next[5];//豬們的鍊錶
int heap[2000],m,n;//儲存牌堆什麼的。
int fsum;//儲存反豬的數量
maprevf;mapf;//對映們
bool flag;//是否有人又跳了。
inline char gt()
inline void got(int i,int pai);
pig[i].end[0].pred->succ=pl+tot,pig[i].end[0].pred=pl+tot++;
pl[tot]=(ls);
pig[i].end[pai].pred->succ=pl+tot,pig[i].end[pai].pred=pl+tot++;
}inline void del(int i)
inline void out()
else printf("dead");
putchar('\n'); }}
inline bool hate(int i,int j)
inline void attack(int i,int j)
//判斷是否存在獎勵/懲罰
if(pig[j].id>0&&i==0)
}else if(pig[j].id<0)for(j=3;j--;)got(i,heap[--m]);
} else }}
inline bool require(int i,int j,int p)
else
} inline void update(int i)
inline bool find(int i,int flag)
for(int j=next[i];j!=i;j=next[j])
if(pig[j].id*flag>0&&pig[j].begin[7].succ!=pig[j].end+7)
return 0;
}inline void req(int i,int p)
}int main()
//read
for(i=0;isucc)
break;
case 2:
if(notyet|pig[i].zhuge&&****1+1)
break;
case 8:
del(ptr-pl);
if(pig[i].zhuge==0)
break;
case 4:
if(****2!=i)}}
break;
case 5:
del(ptr-pl);
req(i,2);
break;
case 6:
del(ptr-pl);
req(i,3);
break;
}if(flag)
ptr=pig[i].begin;}}
}}
**(ac):
#includeusing namespace std;
#include#include#include#include#include#include#includestruct lspl[1000000];
int tot;
struct pspig[50];
int pred[50],next[50];//豬們的鍊錶
int heap[10000],m,n;//儲存牌堆什麼的。
int fsum;//儲存反豬的數量
maprevf;mapf;//對映們
bool flag;//是否有人又跳了。
inline char gt()
inline void got(int i,int pai);
pig[i].end[0].pred->succ=pl+tot,pig[i].end[0].pred=pl+tot++;
pl[tot]=(ls);
pig[i].end[pai].pred->succ=pl+tot,pig[i].end[pai].pred=pl+tot++;
}inline void del(int i)
inline void out()
else printf("dead");
putchar('\n'); }}
inline bool hate(int i,int j)
inline void attack(int i,int j)
//判斷是否存在獎勵/懲罰
if(pig[j].id>0&&i==0)
}else if(pig[j].id<0)for(j=3;j--;)got(i,heap[m?--m:0]);
} else }}
inline bool require(int i,int j,int p)
else
} inline void update(int i)
inline bool find(int i,int flag)
for(int j=next[i];j!=i;j=next[j])
if(pig[j].id*flag>0&&pig[j].begin[7].succ!=pig[j].end+7)
return 0;
}inline void req(int i,int p)
}int main()
//read
for(i=0;isucc)
break;
case 2:
if(notyet|pig[i].zhuge&&****1+1)
break;
case 8:
del(ptr-pl);
if(pig[i].zhuge==0)
break;
case 4:
if(****2!=i)}}
break;
case 5:
del(ptr-pl);
req(i,2);
break;
case 6:
del(ptr-pl);
req(i,3);
break;
}if(flag)
ptr=pig[i].begin;}}
}}
SDOI2010 魔法豬學院
點此看題 直接講人話把,網上的什麼性質和結論看得我想吐。首先建出以t tt為根的最短路樹,在反圖上跑最短路然後建樹,多條滿足條件的邊任選即可。我們考慮用非樹邊替換樹邊,定義一條邊 u,v u,v u,v 的權值是 c d is u di s v c dis u dis v c dis u d is ...
SDOI2010 古代豬文
題目背景 在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關心 選自豬王國民歌 很久很久以前,在山的那邊海的那邊的某片風水寶地曾經存在過乙個豬王國。豬王國地理位置偏僻,實施的是適應當時社會的自給自足的莊園經濟,很少與外界聯絡,商貿...
SDOI 2010 古代豬文
一句話題意 設 x sum c n d 求 g x pmod 從原題面大段語文中其實不難推出所求。以前一不敢碰.今天做做發現是個水題 顯然問題在指數上,而不是整個式子。暴力檢驗一下,發現模數為質數。根據費馬小定理,a k equiv a pmod 所以所求化為 sum c d pmod woc怕不是...