2018南京ICPC現場賽部分題題解

2021-10-25 03:22:52 字數 4410 閱讀 9794

給你n個石子,下標從1到n,每次最多取連續的k個石子,問最後誰能贏(取完石子的那個人算贏)。

如果有奇數個石子,那麼a中間取乙個,b拿什麼,a接下去就在對稱的另一邊拿什麼,這樣a贏。

如果有偶數個石子,且b>1 ,那麼a可以在中間取兩個,然後又回到了上述的過程,這樣a贏。如果b==1,那麼石子是偶數個,則b贏。

注意特殊情況:一開始有0個石子,那麼就是b贏。

#include

using

namespace std;

intmain()

//system("pause");

return0;

}

最小球覆蓋。在三維座標系中給你n個點的座標,求出到所有點的最大距離的最小值。

三分法的巢狀。三分x座標(三分y座標(三分z座標))。

#include

using

namespace std;

int n;

struct node

node[

105]

;double

dis(

double x1,

double y1,

double z1,

double x2,

double y2,

double z2)

double

cal(

double x,

double y,

double z)

//x,y,z都確定

double

cal(

double x,

double y)

//x和y已經確定

return ans;

}double

cal(

double x)

//x已經確定

return ans;

}int

main()

printf

("%.7f\n"

,ans)

;//system("pause");

return0;

}

找有多少個等腰三角形

打表可得規律: n(n+1)(n+2)(n+3) / 24;(除法時要用逆元)

#include

using

namespace std;

typedef

long

long ll;

ll mod=

1e9+7;

ll quick_pow

(ll x,ll y)

return res%mod;

}int

main()

//system("pause");

return0;

}

給定n個英雄,m只怪獸,k瓶強化藥劑。每個英雄只能殺乙隻怪,乙個英雄磕了藥之後能夠多殺乙隻,但是乙個英雄至多只能磕一次藥。已知每個英雄能夠殺死哪些怪獸,問最多殺死幾隻怪。

網路最大流的關鍵在於建圖。新增源點和兩個中間結點,編號分別為1,2,3。再新增n個結點表示英雄,編號為4——n+3。再新增m個結點表示怪獸,編號為n+4——n+m+3。最後新增匯點,編號為n+m+4。

連線源點和兩個中間結點,容量分別為n和k。將每個英雄和兩個中間結點相連,容量為1。將每個英雄和他能消滅的怪獸相連,容量為1。最後將每個怪獸和匯點連線,容量為1。

跑dinic演算法即可。

#include

using

namespace std;

const

int n=

2000

,inf=

1<<30;

int head[n]

,cent=0;

int s,t;

//超級源點和超級終點

int maxflow=0;

int dep[n]

,ans[n]

,vir[n]

;//在bfs分層時所用

struct node

node[n*10]

;void

add(

int u,

int v,

int val)

bool

bfs(

) queue<

int>q;

q.push

(s);

//將超級源點加入佇列中,並初始化。

dep[s]=0

;while

(!q.

empty()

)}}}

if(dep[t]

!=0x3f3f3f3f

)return1;

return0;

}int

dfs(

int u,

int flow)

int used=0;

for(

int i=vir[u]

;~i;i=node[i]

.next)}}

return used;

}int

dinic()

return maxflow;

}int

main()

}for

(int i=a2+

1;i<=a3;i++

)//每個怪獸與匯點相連

add(i,t,1)

,add

(t,i,0)

;printf

("%d\n"

,dinic()

);//跑dinic

//system("pause");

return0;

}

給你乙個長度為n的序列ai,fac(l,r)為第l個數到第r個數的不同素因子的數量和,現在求解

這樣的計數題,要考慮每個質因子的貢獻。我們可以計算所有質因子出現的位置壓入vector中。計算每乙個位置上的質因子對於答案的貢獻。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e6+10;

vector<

int>a[n]

;int primes[n]

,ans[n]

,idx=0;

void

resolve

(int pos,

int x)

k++;}

if(x>

1) a[x]

.push_back

(pos);}

intmain()

}int n;

scanf

("%d"

,&n)

;for

(int i=

1;i<=n;i++

) ll res=0;

for(

int i=

0;i<=n;i++)}

printf

("%lld\n"

,res)

;//system("pause");

return0;

}

有乙個n*m地圖,每個方塊標記為0和1, 1的方塊表示可以通行並且在最開始的時候有乙隻袋鼠,0的方塊表示不能通行。可以對所有袋鼠進行上下左右四個方向的操作。問如何在50000次操作內把所有袋鼠聚集在乙個方塊。

隨機化(看了別的博主的**,但我還不能證明,為什麼對。。。)

ac code

#include

using

namespace std;

char s[25]

[25];

int n,m;

intmain()

;for

(int i=

1;i<=

20;i++

)printf

("u");

for(

int i=

1;i<=

20;i++

)printf

("r");

for(

int i=

1;i<=

20;i++

)printf

("d");

for(

int i=

1;i<=

20;i++

)printf

("l");

for(

int i=

1;i<=

49920

;i++

)return0;

}

2018 icpc 南京網路賽

題目 鏈結 a.an olympian math problem 輸出n 1即可 女朋友猜的 includeusing namespace std define ll long long ll fac 103 int main for int i 1 i m i ll ans 0 for int i...

2013 南京現場賽部分題解

題意 就是求個gpa 思路 不說了 include include include using namespace std double cal char str else if strcmp str b 0 return 3.0 else if strcmp str b 0 return 2.7 ...

2018 ICPC 南京網路賽 skr

題意 給出乙個字串,求它的所有回文子串轉化成數字的和,對1e9 7取模。題解 先上manacher,然後列舉每個點,按照半徑從大到小的順序列舉回文串,遇到出現過的就break,統計答案即可。注意的是,判重時只能用pb ds中的gp hash table,unordered map會t,同時需要兩個字...