第六屆浙江省賽題解(部分)

2021-08-19 05:21:54 字數 4039 閱讀 8086

題目鏈結

題目大意

有n個投標者,投標最高的獲得物品,需要支付第二投標者的**.

解題思路

使用結構體,儲存投標的**和一開始的排序.

然後根據投標**排序,使用sort就可以了

ac**

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 110;

struct node

a[maxn];

bool cmp (node a, node b)

int main()

sort(a+1, a+n+1, cmp);

cout

<< a[n].n << ' '

<< a[n-1].w << endl;

}return

0;}

題目鏈結

題目大意

,求陰影部分

l' role="presentation" style="position: relative;">l

l的最大長度

解題思路

h,是固定的長度的,首先延長邊,根據邊的比例能夠退出x+y的函式表示式(用θ表示)

列出兩個極端的情況,人在最左邊和最右邊,這就是θ的取值範圍,然後對上面的函式表示式求導,得到函式是先增後減的,有極大值

求出零點θ的值(二分),然後判斷3點的值的最值即可

ac**

#include

#include

#include

#include

using

namespace

std;

double h,d,h;

double mid;

bool judge(double mid)

int main()

double ans = max( (d*h/h), h);

double tanx = h - (d/tan(mid)) + (tan(mid)*(h-h)) + d;

ans = max(ans, tanx);

printf("%.3f\n", ans);

}return

0;}

題目鏈結

題目大意有n

n

臺計算機,要建立小型區域網,所有連線都是雙向的。兩台計算機的鏈結成本是ci

j' role="presentation" style="position: relative;">cij

cij,找到最小的成本的連線方法

解題思路

乙個最小生成樹的模板題目。但是他要輸出最小的字典序。

最簡單的方法是輸出邊的時候排序。

但是,如果生成樹不是一條的話就很難弄了。

所以我們可以吧輸入的資料,先排序,首先根據費用排序,然後根據起點排序,最後根據終點排序。

ac**

#include

#include

using

namespace

std;

const

int maxn = 10000+10;

struct nodenode[maxn];

struct mpmp[maxn];

bool cmd1(mp a,mp b)

int pre[maxn];

int p=0,n,pp=0;

int find(int root)

int kruskal()

}return ans;

}int main()}}

int q = kruskal();

if(q == 0 || q != n-1)else}}

}return

0;}

題目鏈結

題目大意

題解思路

使用map直接儲存字串,然後直接找就好了

ac**

#include

#include

#include

#include

#include

using

namespace

std;

map mp;

int main()

int n,p;

scanf("%d",&n);

for(int i=0;iscanf("%d",&p);

int sum=0;

for(int j=0;jcin>>s;

if(mp[s]==1) sum++;

}printf("%d\n",sum);

}return

0;}

題目鏈結

題目大意

給你乙個輸入序列乙個輸出序列,問是queue還是stack,還是都不或者都不是

解題思路

直接模擬,拿輸出序列和queue還有stack輸出對比

ac**

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 100+10;

int a[maxn],b[maxn];

queue

q;stack

s;int main()

int flag1,flag2;

flag1=flag2=1;

for(int i=0;iint x;

scanf("%d",&x);

if(x==q.front())else

if(x==s.top())else

}if(flag1==1 && flag2==1)else

if(flag1==1 && flag2==0)else

if(flag1==0 && flag2 == 1)else}}

return

0;}

題目鏈結

題目大意

構造出乙個點的值等於周圍四個點的值的和(注:一定是四個點,挨著邊的都不算

解題思路

構造題一般都不是乙個解,只要符合題目就行。

因為乙個點的值等於周圍四個點的值的和,所以當都是0時也是符合條件的,題目的樣例中也給出了這種情況,這種也是最好構造的.

我們可以從上到下,除了邊上點,其餘的符合條件的地方使用0,後面不符合條件的用1來填充。

注意最後的空格和換行,不然會wa

ac**

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 17;

int num[maxn][maxn];

void tian(int n, int m, int k)}}

else

}if(k % (m-2) != 0)

for(int j=(k%(m-2))+1; j < m; j++)

i++;

}for(;i < n; i++)}}

}int main()}}

return

0;}

第六屆山東省省賽題解

給出n個人的身高和體重 要求按身高排序後 奇數序號的人一隊,偶數序號的人一隊 體重大的一隊獲勝 水題,考察點是結構體的排序 要注意的是變數的初始化以及資料型別的精度和輸入 struct node a 110 bool cmp node a,node b intmain sort a,a n,cmp ...

山東省第六屆省賽K題

題意描述 題目原型來自lol遊戲,乙個人和一座塔,共同打n個怪,每個怪都有一定的血量,塔和人都有無限血。每一 擊都是塔先打,而且塔只按順序打怪物,人後打,但人可以選擇任意乙個攻擊,但是人在每一輪可以攻擊也可以不攻擊。求人最多可以給幾個怪物以最後一擊。1 n 1000,塔,人的每次攻擊力x y 在 0...

藍橋杯第六屆省賽C C B組個人題解

直接暴力 答案 52488 include using namespace std intmain t 10 if ok ans cout excel填一下 2017 8 5 這題有意思了 可以用數學直接推出來 首先三必定是1,祥 1 10 羊 1 進製情況 1 有進製的情況 祥 10 羊 不成立 ...