第六屆山東省省賽題解

2022-05-09 02:39:08 字數 3593 閱讀 1149

給出n個人的身高和體重

要求按身高排序後

奇數序號的人一隊,偶數序號的人一隊

體重大的一隊獲勝

水題,考察點是結構體的排序

要注意的是變數的初始化以及資料型別的精度和輸入

struct

node a[

110];

bool

cmp (node a, node b)

intmain()

sort(a, a+n, cmp);

double

s1, s2;

s1 = s2 = 0

;

for (int i = 0; i < n; i++)

else

}if (s1 >s2)

else

if (s1

else

}return0;

}

給出n種操作,每種操作都由字母表示,當輸入為b時,輸入乙個整數x,代表顧客對產品的出價,當輸入為c是,輸入乙個整數x,代表取消之前**為x的出價,當輸入為q是,詢問當前對產品的出價中只出現過一次的最小的**,如果存在,輸出該最小值,如果不存在,輸出none。

開闢乙個陣列,用下標表示**,該下標下元素的值代表該**的出價次數,每當顧客出價時,將元素加一,並記錄下當前出價的最大值max,若操作為取消之前的**,就將陣列減一即可;最後詢問最小值的之後只要從一開始遍歷到出價的最大值,找到第乙個值為一的元素即可;

#includeint

main()

,max=0

,x;

char

c; scanf("%d

",&n);

getchar();

for(int i=0;i)

if(c=='c'

)

if(c=='q'

)

if(flag==1

) printf(

"%d\n

",t);

else

printf(

"none\n");

}getchar();}}

return0;

}

c - game!

博弈現有n個石頭圍成一圈

兩個人輪流拿石頭,可以拿乙個或連續的兩個

拿走最後石頭的獲勝

環形博弈

對於先手只可能在他能拿石子個數的範圍內取勝,否則後手贏。

當石子個數多於兩個的時候

對手只需要拿走先手所選擇石子對面的石子就一定可以獲勝

int

main()

else

}return0;

}

三個人(三個人分別為1,2,3)站在三角形的三個頂點(1站在a上,2站在b上,3站在c上)上,另有乙個人站在三角形內部(可以站在內部的任意位置),之後站在頂點上的三個人按照頂點順序開始向相鄰頂點跑動(1->b,2->c,3->a),當三個人中的任意乙個人跑到另乙個頂點的時候,遊戲結束。給定三個人跑向相鄰頂點所需要的時間,問站在三角形內部的那個人能否找到乙個時刻,可以擋住視線(1->c,2->a,3->b),如果有,那就輸出yes和這個時刻,輸出到小數點後四位。如果沒有,輸出no。

塞瓦定理:塞瓦定理是指在△abc內任取一點o,延長ao、bo、co分別交對邊於d、e、f,則 (bd/dc)×(ce/ea)×(af/fb)=1

通過塞瓦定理,用二分求解方程即可。如果判斷迴圈條件為low<=high時,會超時,題意要求精確到小數點後四位,所以判斷條件可以改成fabs(n)>1e-5(n為方程的結果)。

#include#include

#include

#include

#include

#include

#define n 1000+10

#define inf 0x3f3f3f3f

#define ll long long

using

namespace

std;

intmain()

}while(fabs(n)>1e-5

);

if((int)n==0

) printf(

"yes %.4lf\n

",mid);

else

printf(

"no\n");

}return0;

}

平方數:某個整數的平方;

給定一串整數(a1,a2........an),求有多少對整數的乘積(ai*aj),使得這個乘積為平方數。

任何的平方數都可以分解成若干素數的偶次冪,先打表將所有素數的平方全部打出來,之後可以將每乙個數先分解成若干素數的平方次冪,將分解後剩餘的部分存入陣列中,最後只需要找剩餘部分相同的數兩兩匹配即可。

#include#include

#include

#include

#include

#include

#define n 10000000+10

#define ll long long

using

namespace

std;

inta[n],b[n],flag[n];

intmain()

}while(t--)

flag[x]++;

}ll ans=0

;

for(int i=1;i)

ans+=flag[i]*(flag[i]-1)/2

; printf(

"%lld\n

",ans);

}return0;

}

給兩個數n,m(0<=n,m<=10^1000),代表n個男人和m個 女人,問能否將其分成11組,使得每組男的數量等於女的數量。

因為給的數太大,所以採用字串處理。

同餘定理

(a+b)%c=(a%c+b%c)%c;

(a*b)%c=(a%c*b%c)%c;

比如:846%c=((8*10+4)*10+6)%c=(((8%c*10*c)%c+4%c)%c*10%c)%c+6%c)%c;

所以通過將字串的每個字元轉換成數字取餘最後判斷即可;

#include#include

#include

#include

#define n 10000000

using

namespace

std;

char

n[n],m[n];

intmain()

if(a==0

) printf(

"yes\n");

else

printf(

"no\n");

}else

printf(

"no\n");

}return0;

}

山東省第六屆省賽K題

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

第四屆山東省省賽題解

幾何 給你等邊三角形的兩個點a和b,求第三個點c的座標 且abc是逆時針的 因為要求abc是逆時針的,所以可以直接用b繞a逆時針旋轉60 這裡有個通用的公式,證明稍微複雜,可以加到模板裡以備不時之需 點 x1,y1 繞點 x2,y2 逆時針旋轉a角度後新的座標 x,y 為 x x1 x2 cos a...

sdut 3258 第六屆山東省ACM省賽H題

題意 乙個數可以表示為另乙個數的平方叫做square number,像3 3 9,9是乙個square number。給定n個數,求有多少對 ai,bi 滿足ai bi為乙個square number,其中i j。思路 除1之外的任何乙個整數都可分解為有限個質數的乘積,所以可以推得兩個數分解為質因數...