SDOI2010 豬國殺 解題報告

2021-06-28 19:49:57 字數 3844 閱讀 4039

這道題作為一道省選題,質量真是差到了極點!!強烈建議千萬不要去做!

首先,這題意與資料不合,而樣例怎麼看都是錯的,反豬明明有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怕不是...