洛谷7月月賽題解(2020)

2022-05-21 11:36:07 字數 1579 閱讀 7064

​ 醜話說在前面,我只寫了前三個的題解(因為有人告訴我第四題沒有價值!!)

​ 標題黨,廣大oier看了直呼內行!真就簽到題唄。反正就是把冪魔改成開根向下取個整。看**吧。

int main()
​ 混,混凝土??(擦汗),哎呀不就等腰三角形嗎,分類討論一手等腰和等邊,選取 1~2*len-1 的邊進行一下組合運算,就像我這樣的蒟蒻才會放到桶裡做,dalao們都是直接排一手序然後二分查詢……不說了上**

const int mod=998244353;

int n,maxx,x;

long long sum[200005],a[200005];

long long ans;

int main()

for(int i=1;i<=maxx;++i)sum[i]=(sum[i-1]+a[i])%mod;

for(int i=1;i<=maxx;++i)

} cout<​ 首先,明確幾個基本點。

知道這些點後,那麼可以快速地判斷出無解的情況:1.該在同一列的不在同一列 2.不在'w'軌跡上,可以用奇偶判別法。

判斷完無解後,由於**是由兩個'w'上下插在一起,同一列也是一一對應,所以只把其中的一條'w'拿出來給它拉直就好。於是我們得到兩個不包含重複元素的序列,求由這個序列轉換到另乙個序列的最小運算元(操作為將相鄰的兩個數交換)。

​ 其實到這裡有一點氣泡排序的意思在裡面,如果變成轉換為公升序直接逆序對就完事了。

​ 關於轉換成公升序,很顯然數值並不是公升序的,但是下標是。假設原序列為 a ,目標序列為 b,那麼對於乙個 \(a_i\),b中有且只有乙個(與上文的不包含重複元素相照應)與它值相同的 \(b_j\),將 \(b_j\) 的下標 j 放到 i 的位置去,構成乙個新序列 c,那麼c 轉化為公升序就是答案,即 c 的逆序對數。(這裡有點繞,但是很重要)

​ 這裡我逆序對採用權值樹狀陣列,從後往前掃瞄,單點修改和求和(不會的我稍微講一下,由於從後往前,所以保證了在乙個新點加入的時候樹狀陣列內的全是下標比他大的,於是求個和sum(a[i]-1)就得出了下標大但是數值小的個數,最後把 a[i] 對應的改為1)

然後**裡面有個比較繞的指標……湊合著看,以及有兩個輔助的函式(魔改成define了,乙個是知道列號給出w中的位置,乙個是知道w中的位置給出列號)

#include#include#include#includeusing namespace std;

#define lowbit(x) ((x)&(-(x)))

#define fz(x) (x>n?x-n:x)

#define fx(x) (x%2?x:x+n)

const int maxn=2*1e6+5;

int n,a[maxn],b[maxn],to[maxn],c[maxn];

int read()

long long ans;

void add(int x)

int get(int x)

int main()

cout

}

洛谷 9月月賽

題目描述 眾所周知,在一些特殊的部門,如果密碼能夠讓乙個人就解開,就會非常不安全。pic pre invoked code,預生成密碼 誕生了。這個密碼比較安全,是因為它必須由三個人保管。系統首先預先生成三個大整數a b c,計算出它們的與and 或or 和sum並儲存,然後將a b c分別告訴這三...

洛谷5月月賽

n堆石子,每次可以從第i堆中取走乙個當且僅當ni ni 1 第0堆視作0個 拿不了就輸了。問先手贏還是後手贏。奇偶性問題。不管如何分布,必定全部被拿完。include inline char gc return s inline int read while c 0 c 9 return x f i...

洛谷10月月賽II

這道題考了矩陣旋轉 其實很考驗推公式的能力和 能力 這裡有個小技巧 可以設 x,y 為原點,然後去推公式,然後實際操作中橫座標加上x,縱座標加上y就好了。順時針 i,j j,i 逆時針 i,j j,i include define rep i,a,b for register int i a i b...