LGR 6 洛谷入門賽 3

2021-10-02 07:16:19 字數 3339 閱讀 5343

題目鏈結

b【深基3.例3】閏年判斷

c【深基3.習8】三角形分類

d【深基4.例13】質數口袋

e【深基5.例7】工藝品製作

f【深基7.例1】距離函式

g【深基7.例10】旗鼓相當的對手 - 加強版

h【深基9.例4】求第 k 小的數

i 【深基16.例1】淘汰賽

a 數字反轉

直接逆序輸出即可

//直接利用string儲存逆序輸出

#include

#include

using

namespace std;

intmain()

b 閏年判斷

判斷閏年的條件:能被 4 整除,但是不能被100整除或者能被400整除

#include

using

namespace std;

intmain()

else

return0;

}

c 三角形分類

先判斷輸入的三條邊是否合法,然後根據邊來判斷三角形的屬性,滿足一條輸出一條即可。

#include

using

namespace std;

intmain()

if(a*a+b*b==c*c||c*c+b*b==a*a||a*a+c*c==b*b)

else

if(a*a+b*belse

if(a*a+b*b>c*c||c*c+b*b>a*a||a*a+c*c>b*b)

if(a==b||b==c||a==c)

if(a==b&&b==c)

return0;

}

d 質數口袋

判斷質數的方法:根據數論理論可以把數字分成6個大部分,6i,6i+1,6i+2,6i+3,6i+4,6i+5,也就是說數字x%6計算的值一定是0,1,2,3,4,5這6個數字,而6i,6i+2,6i+3,6i+4一定就是合數,它們都有除了1之外的因數,只有6i+1和6i+5可能是素數,因而一旦判定數字大於等於且6取模結果為0,2,3,4就可以判定不是素數。

#include

using

namespace std;

bool vis;

intcheck

(int temp)

else

if(temp%6!=

1&&temp%6!=

5)for(

int i=

5; i<=

sqrt

(temp)

; i+=6

)}return1;

}int

main()

for(

int i=

2;i<=l;i++

)else}if

(vis)

} cout

}

e 工藝品製作

這個題目直接暴力求解,列舉所有點的狀態進行統計即可,要注意一點就是每個輸入的點也會被蒸發

#include

using

namespace std;

int a[

100]

[100][

100]

;int

main()

}}}for

(int i=

1;i<=w;i++)}

}}cout

}

f 距離函式

直接用兩點間距離公式求即可

#include

using

namespace std;

intmain()

g 旗鼓相當的對手 - 加強版

這個題目注意輸出順序即可,我沒仔細讀題wa了好多次

先對乙個組內的排序,將字典序小的放到前面,然後對組合進行排序,先把每個組裡第乙個拿出來比較,如果相等比較第二個,將字典序小的放到前面。

#include

using

namespace std;

struct stu s[

105000];

struct zan tu[

105000];

bool

cmp(zan a,zan b)

else

}int

main()

for(

int i=

0; i(temp==1)

else}}

}}sort

(tu,tu+d,cmp)

;for

(int i=

0; i)return0;

}

h 求第 k 小的數

這個道題就比較(keng)好了

sort函式直接tle

自己寫了乙個優化的快排還是超

改了n(忘記多少次了)次終於不超了

#include

using

namespace std;

typedef

long

long ll;

intpatition

(int a,

int left,

int right)

a[left]

= x;

return left;

}void

find

(int a,

int left,

int right,

int k)

intmain()

i 淘汰賽

看起來很麻煩,無從下手,仔細分析題意

其實就是陣列前一半的最大值與後一半的最大值比較,找到小的值的下標

#include

using

namespace std;

int a[

1024];

intmain()

//coutb=all/2+

1;max1=a[1]

,max2=a[all/2+

1];for

(int i=

1; i<=all/

2; i++)if

(a[i+all/2]

>max2)

}//cout(max2>max1)

else

return0;

}

LGR 051 洛谷9月月賽

luogu 給出 k 和質數 m 求最小的 n 使得 111.1 n 個 1 equiv k mod m m le10 0 le k m 把 n 個 1 寫成等比數列求和的形式,不難推出這個式子 10 n equiv9k 1 mod m 所以直接上 bsgs 就行了。應該是不存在無解的情況的,畢竟無...

LGR 050 洛谷8月月賽

只有比賽現場的暴力 留念,覆盤題解見具體題目 t1 耗時20mins,暴力列舉,複雜度o nq 期望得分50 include include using namespace std define mod 998244353 const int maxn 1e6 10 typedef long lon...

LGR 054 洛谷10月月賽II

luogu 成功咕掉codeforces round 517的後果就是,我 mbox 依舊沒有寫出來。mbox mbox 為 0 的乘上 mbox 為 1 的就是答案。因為兩個數異或以後二進位制位 1 的個數的奇偶性不會變。至於計算 mbox 預處理到根號,o 1 計算即可。include incl...