2023年2月15日 考試

2021-10-02 20:54:10 字數 3560 閱讀 6553

一如既往的菜。。。。。。

關鍵是轉換的方法

#include

using

namespace std;

typedef

long

long ll;

struct sh

;bool

operator

<

(const sh &a,

const sh &b)

priority_queue

>q;

int n;

ll x,y,z;

//x是原數,z暫存原數,y是轉換後的數

queue<

int>s;

intmain()

if(s.

front()

==0) s.

pop();

while

(!s.

empty()

) q.

push()

;}while

(!q.

empty()

)}return0;

}

這個沒什麼難度,利用了佇列的知識

#include

using

namespace std;

const

int n=55;

queue<

int>q;

int t,n,a[n]

;int

main()

int t=0;

while

(q.size()

>1)

if(t>0)

}}printf

("%d\n"

,q.front()

);}return0;

}

注意是閉區間

還有long long

#include

using

namespace std;

typedef

long

long ll;

const ll n=

1e6+1;

ll prime[n]

;bool b[n]

;ll l,r,t,cnt=

0,maxn=n;

void

iint()

}}intmain()

}for

(ll i=l;i<=r;i++)}

} cout

}

合併隕石那題的高階版,陣列開大,而且要用long long,不要忘了佇列裡也得改,當時就是這裡沒改,沒看到,瘋狂wa

#include

using

namespace std;

typedef

long

long ll;

priority_queue

,greater

>x;

ll y,n,s1,s2;

intmain()

while(1

)}return0;

}

資料少,暴力即可解決

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e7+1;

int prime[n]

;bool b[n]

;int t;

int n,cnt=

0,maxn=n;

queue<

int>q;

void

iint()

}}intmain()

while

(q.size()

>1)

//迴圈報數}}

cout

pop();

}return0;

}

這裡t加強到了30000,所以上一種做法肯定會tle,因此可以先打表,因為1e7以內只有11個素數結果;不難理解,某乙個範圍內的數,進行了題目中的迴圈後,出來的結果之一樣的

輸入上限1e7可以得到乙個答案x,然後我們輸入x-1得到答案y,重複11次就可以找到所有答案組

#include

using

namespace std;

int a[12]

=;intmain()

}

自己的想法是把所有距離都找出來,但是不對,因為沒有必要,題解用的是貪心的思想

由於 兩根靠近的釘子之間的間隔一定是相對小的,所以先把靠近的釘子之間的間隔扔進優先佇列,這樣優先佇列的隊首一定是最短的間隔。

間隔採用結構體儲存,分別儲存左邊的釘子,右邊的釘子和間隔長度。

同時對繩子進行排序,從最短的繩子開始 依次往釘子上掛。

每取出一根最短的繩子,消耗乙個最短的間隔 (pop一次)

同時還要 向優先佇列中插入乙個向右延伸的間隔 即右端點 +1

(注意插入時要檢測邊界,不能越界。)

這樣始終 保持優先佇列中的隊首是未被使用的最小間隔。

當隊列為空或者有繩子掛不上了,即為失敗,輸出 no

否則順利掛完繩子,圓滿結束即為成功,輸出 yes

#include

using

namespace std;

typedef

long

long ll;

struct node

;bool

operator

<

(const node &a,

const node &b)

priority_queue

>q;

//釘子佇列

priority_queue<

int,vector<

int>

,greater<

int>

>qq;

//繩子佇列

int a[

500005];

intmain()

);//先把相鄰的兩個釘子的距離入隊

}for

(int i=

1;i<=m;i++

)int flag=1;

struct node tmp;

for(

int i=

1;i<=m;i++

) tmp=q.

top();

q.pop();

if(qq.

top(

)>=tmp.dis));

}else

qq.pop();

}if(flag==1)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

2023年2月22日 考試 更新中

最後一次考試也是以僅ac一道題結束,大佬們各種全新的 奇特的方法在我心中留下了難以磨滅的印象。總共大約兩周的acm集訓,讓我充分認識到自己的能力和知識還遠遠不夠,現在才是學習的開始,終有一天,我能靠自己的能力解決一道又一道的難題,成為大佬。2020.2.29 唯一自己做出來的一道水題,先開啟這個難以...

2023年2月1日學習記錄

事實上,在那些不需要任何理由就能作出決定的時刻,我們的自由才會愈加明顯。然而,這並沒有值得過多詬病的地方。因為在緊急情況下,沒有理由便是最好的理由。為什麼這樣說呢?顯然,在這種情況下,我們的行為不會表現得過於膚淺和愚蠢,也不會表示出那些與自身無關且易於解釋的觀念。相反,我們的行為與我們的情感相匹配,...

2023年2月8日 OJ習題

這類題的常規思路是結構體排序,但是本題由於並沒有多種元素,因此用不著結構體,僅僅是陣列排序就可以 include using namespace std int n,m,o int f 110 bool cmp int a,int b intmain return0 先打表,然後直接些就好了 inc...