2019山東省賽重現補題總結

2022-05-02 19:24:07 字數 2925 閱讀 8975

賽後做了一下隊友做的h和沒做出來的l

感覺其實還挺簡單, 就是沒往那邊去想,亦或者說,對這個演算法掌握的不熟練。

給你幾個線段, 然後你可以在每個線段上找乙個點(這個點必須是在y軸方向上, 沒有別的點和它平行,就是一豎行上只能有乙個點),然後問你有這個點的線段(這個線段至少有乙個點,多個也沒問題)有多少

一看給的是一條線段的左右端點, 肯定考慮對左端點排序,再對右端點排序

通過上面的分析, 我們只需要用乙個優先佇列並對 < 進行過載就行了

#include #include #include#include #include #include #include #include #include #include #include#include #include#define cl(x) memset(x,0,sizeof(x))

#define rep(i,a,b) for(i=a;i<=b;i++)

#define drep(i,a,b) for(i=a;i>=b;i--)

#define em(x) emplace(x)

#define emb(x) emplace_back(x)

#define emf(x) emplace_front(x)

#define fi first

#define se second

#define pb push_back

#define de(x) cerr<<#x<<" = "<"; err(x); } while (0)

using namespace std;

//using namespace __gnu_pbds;

typedef long long ll;

typedef pairpii;

typedef pairpll;

const ll max = 9.1e10;

const int n =3.1e5;

const int maxn = 200010;

void clear(unsigned char *pta, int size )

}ll n, k, m ;

ll ar[n],br[n];

ll i,j,g;

ll mod = 998244353 ;

struct node

};priority_queueq;

void answer()

ll cnt =0 , h = 0;

while(!q.empty())

else if(new.l < new.r)

}cout《給你幾個點,然後告訴你這些點左邊嚴格大於右邊,問你 有幾個點可以成為中間的點

因為條件是大於的關係, 所以可以把這個看成乙個有向圖(左邊的點指向右邊的點)

在找到演算法和思路後, 只需要最後判斷一下, 每個點的出度和入度是否是大於等於(等於是因為題面說 n 一定是個奇數)(n+1)/2即可

#include #include #include#include #include #include #include #include #include #include #include#include #include#define cl(x) memset(x,0,sizeof(x))

#define rep(i,a,b) for(i=a;i<=b;i++)

#define drep(i,a,b) for(i=a;i>=b;i--)

#define em(x) emplace(x)

#define emb(x) emplace_back(x)

#define emf(x) emplace_front(x)

#define fi first

#define se second

#define pb push_back

#define de(x) cerr<<#x<<" = "<"; err(x); } while (0)

using namespace std;

//using namespace __gnu_pbds;

typedef long long ll;

typedef pairpii;

typedef pairpll;

const ll max = 9.1e10;

const int n =3.1e5;

const int maxn = 200010;

void clear(unsigned char *pta, int size )

}ll n, k, m ;

ll ar[n],br[n];

ll i,j,g;

ll mod = 998244353 ;

ll floyed[110][110];

ll in[maxn],out[maxn];

ll fac[n],inv_fac[n];

//快速冪

ll qpow(ll x, ll y )

return res;

}void pre()

}ll c (ll a ,ll b)

return fac[a] * inv_fac[b] % mod *inv_fac[a-b]%mod;//a 的階乘 / ( b的階乘 * (a-b的階乘))

}void answer()

}for(int i=1;i<=m;i++)

for(int i=1;i<=n;i++)}}

cl(in),cl(out);int flag = 0;

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

in[j]++;

out[i] ++;}}

if(flag)break;

}if(flag)

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

else

}pn;

return ;

}int main()

2019山東省賽補題

a題 題解 a題注意看清題目每月三十天每週五天很關鍵,因為每月星期幾是固定的。include define ll long long using namespace std const ll nl 1e5 5 ll a nl ll b nl ll c nl int main else if s tu...

總結山東省賽2015

省賽總結 剛開始,暴力破解試題袋,三個人找水題做,我看的h,hms看a,zzh看的c,看出是做過的類似的博弈論,直接敲wa了,查bug沒有,加了個return 0,過了2y,這時再看榜,a題c題已經有許多過掉的,我和hms看a題,看完覺得簡單,就是個結構體排序,直接敲,過一遍樣例就交,結果wa,開始...

2019山東ACM省賽補題題解

wandering robot 題意 大體意思就是乙個機械人按照指定的路線走來走去,最後求最遠點和初始點 0,0 的距離 思路 1.確定最遠點 第一次迴圈路徑確定之後,其他的迴圈基本都是在平移,最遠點可能是在最後一次迴圈但是也很有可能在第一次迴圈 2.確定最遠點的位置 k的值特別的大,所以肯定不能用...