賽後做了一下隊友做的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的值特別的大,所以肯定不能用...