CSP S全國模擬賽第四場 nan?

2022-02-28 10:08:30 字數 2610 閱讀 8727

本來想搶三題的 rk1 ?【無恥

最後發現 t2 好像還是慢了些,只搞了個 rk2

第一題隨便分析一下,發現一段區間中某個元素的貢獻次數就是 \((x+1)·(y+1)\) x 是他左邊的元素個數, y 是右邊(當然指的是詢問區間內)

由於異或的性質,乙個元素最終貢獻次數膜 2 後結果一樣

那麼我們發現對於長度為偶數的區間答案必然是 0

proof: 不難證明每個元素的貢獻次數都是偶數次的

對於長度為奇數的區間,我們發現答案是以區間左端點開始,右端點結束的步長為 2 的序列的異或和

那麼處理一下這個比較特殊的字首異或和就好了

//by judge

#include#include#define rg register

#define fp(i,a,b) for(rg int i=(a),i=(b)+1;ii;--i)

using namespace std;

const int m=2e5+3;

#ifndef judge

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

#endif

char buf[1<<21],*p1=buf,*p2=buf;

inline int max(int x,int y)

inline int read() char sr[1<<21],z[20];int ccf=-1,z;

inline void ot()

inline void print(int x,char chr='\n') int n,q,l,r,a[m];

int main() return ot(),0;

}

我們發現對於所有的二元組搞個並查集然後判斷每個連通塊內邊數減去點數後的值是不是偶數就好了,如果不是的話就要 ans-1

proof: 懶得說

//by judge

#include#include#define rg register

#define fp(i,a,b) for(rg int i=(a),i=(b)+1;ii;--i)

using namespace std;

const int m=2e5+3;

typedef int arr[m];

#ifndef judge

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

#endif

char buf[1<<21],*p1=buf,*p2=buf;

inline int read() int n,m,ans; arr fa,num,siz;

int find(int x)

inline void merge(int x,int y)

int main()

一眼沒看出來,最後發現(不管複雜度的話)是水題...

cdq 暴力分治然後去搞揹包就好了,複雜度 \(n ·m log n\)

這 tm 都能過,noi.ac 的機子也是很棒棒的哦

//by judge

#include#include#include#define rg register

#define fp(i,a,b) for(rg int i=(a),i=(b)+1;ii;--i)

#define ll long long

using namespace std;

const int m=2e4+3,inf=1e9+7;

typedef int arr[m];

#ifndef judge

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

#endif

char buf[1<<21],*p1=buf,*p2=buf;

inline void cmin(int& x,int y)

inline int read() char sr[1<<21],z[20];int ccf=-1,z;

inline void ot()

inline void print(ll x,char chr='\n') int n,m,f[17][2003]; arr a,c;

#define inc(x,y) (x+y>m?x+y-m:x+y)

inline void update(int d,int v,int w)

inline void cdq(int l,int r,int d)

memcpy(f[d+1],f[d],(m+1)<<2); fp(i,mid+1,r) update(d+1,a[i],c[i]); cdq(l,mid,d+1);

memcpy(f[d+1],f[d],(m+1)<<2); fp(i,l,mid) update(d+1,a[i],c[i]); cdq(mid+1,r,d+1);

}int main()

CSP S全國模擬賽第三場 nan死了

居然第一步膜化乘除 都沒看出來,沒救了.大概是貢獻字首和優化的做法 巨兔式講解 大家都學會了麼?咱發現有大量的 i j i j 同時 對很多 c 產生了貢獻,咱可以去優化這一部分的轉移,具體做法就是根據前面能加的後面也能加,然後一路累加且算貢獻 對於小於根號的所有 i j 咱可以優化這一部分轉移,然...

暑期個人賽 第四場 A

時間限制 2000 ms 記憶體限制 65536 kb 大家都回了本部,本部生活雖然沒有巨集福天 mo 堂 gui 般的生活,但是卻有很多外賣,今天有一家飯店新開張,凡是兩個人的餐點費用之和剛好為m可以免運費,在今天一起點外賣且免運送費的兩個人,各自點的外賣 差值最小的有大驚喜。在機房的n個同學今天...

第四場膜你賽總結

前言 這場比之前的能做多了qwq 題目 題解 t1 原題 nkoi 3539 移棋子遊戲 6月月賽題a 題意 明明和亮亮在玩乙個遊戲。桌面上一行有n個格仔,一些格仔中放著棋子。明明和亮亮輪流選擇如下方式中的一種移動棋子 圖示中o表示棋子,表示空著的格仔 1 當一枚棋子的右邊是空格子的話,可以將這枚棋...