給你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,同時需要兩個字...