2017.10.23 – Day 15
測試總結:
T1:就是一個Fibonacci sequence,然而自己預處理時預處理少了…
附:
部分代码(前):
inline void make()
{
f[0]=0,f[1]=1;
for(int i=2;i<=39;++i)
f[i]=f[i-1]+f[i-2];
}
部分代码(后):
inline void make()
{
f[0]=0,f[1]=1;
for(int i=2;i<=45;++i)
f[i]=f[i-1]+f[i-2];
}
T2:↓↓↓std給的正解 ↓↓↓
表示自己考試時第一想法是LCA,但是仔細想想又覺得然并卵…
於是打算打一個30分的暴力走人。
↓↓↓對於暴力給的題解(30%)↓↓↓
表示自己連暴力不會…
可是!出題人并沒有想到還有一種神奇的暴力叫做 –> 二維 Dijkstra+堆
int dis[3025][3025];
inline void make(int x)
{
memset(visit,0,sizeof(visit));
priority_queue< pair<int,int> >que;
que.push(make_pair(0,x));
dis[x][x]=0;
while(!que.empty())
{
pair<int,int> s=que.top();
que.pop();
visit[s.second]=true;
for(int u=first[s.second];u;u=edge[u].next)
if(!visit[edge[u].to]&&dis[x][edge[u].to]>dis[x][s.second]+edge[u].len)
{
dis[x][edge[u].to]=dis[x][s.second]+edge[u].len;
que.push(make_pair(-dis[x][edge[u].to],edge[u].to));
}
}
}
inline void check(int x,int y)
{
int cnt=0;
for(int i=1;i<=n;++i)
if(dis[x][i]==dis[y][i])
++cnt;
cout<<cnt<<endl;
}
if(m<=3000)
for(int i=1;i<=n;++i)
make(i);
for(int i=1;i<=m;++i)
{
int a,b;
a=read(),b=read();
if(a==b) cout<<n<<endl;
else check(a,b);
}
↓↓↓哦?題目中還有一種情況↓↓↓
於是開開心心 20min –> 40分 入手~
T3:表示“拆網線”是個什麽鬼?为啥要拆网线去取暖?
考後出題人說他出的數(樹)據長這樣:
恩恩…
題解表示這只是一道簡單的DP:
當然也有大佬用貪心的高超姿勢…AC AK了…以及網絡流的…
自己表示自己一點思路都沒有…
交一個期望0分的暴力…(只能過樣例)
inline void work()
{
if(k&1) cout<<((k+1)>>1)<<endl;
else cout<<(k>>1)<<endl;
}
結果?
2333333333333333333333333333333……………………
呵呵…這次測試大概就是這樣的了,呵呵…