a:算貪心
兩個陣列排個序瞎搞搞就行了
#include using namespace std;
const int maxn=0x3f3f3f3f;
int n, a[50005], b[50005], ans = maxn, maxn, cmp;
int main()
sort(a + 1, a + n + 1);
sort(b + 1, b + n + 1);
for (int i = 1; i < n; i++)
cout << a[1] - b[n];
return 0;
}
b:
1.先按結束位置從小到大排序
2.對每個區間依次處理
a.從前到後掃瞄這個區間,統計已選點的個數
b.若已選點的個數超過了要求的點數,則continue
c.否則從該區間由後向前掃瞄,新增缺少的覆蓋點
#include using namespace std;
struct node a[5001];
int n, h, s[30001], ans;
bool cmp(node x, node y)
int main()
}cout << ans;
return 0;
}
c:這題我們可以按右端點從小到大排序,我們選擇第一條線段作為初始線段,然後判斷下一條線段的左端點是否大於等於當前選中線段的右端點即可。
#include using namespace std;
int n, k;
struct node a[1000010];
bool cmp(node x, node y)
int main()
}cout << k;
}
d:三分裸題
#include using namespace std;
int a[100005], b[100005], c[100005], n, t;
double l, r, lmid, rmid;
double check(double x)
int main()
l = 0.0, r = 1000.0;
while (r - l >= 1e-9) else
}cout << fixed << setprecision(4) << check(l) << endl;
}return 0;
}
e:組合計數
const int p = 1e5 + 3;
int a, b, c, d, k;
int f[2005][2005], h[2005];
int main()
牛客第三場 J LRU management
起初看到這道題的時候,草草就放過去了,開了另一道題,結果開題不順利,總是感覺差一點就可以做出來,以至於一直到最後都沒能看這道題qaq 題意 類似於作業系統上講的lru演算法,有兩個操作,0操作代表訪問其中的塊,如果命中,將該塊去除放到陣列的末尾,未命中則在陣列末尾加入當前塊,1操作是詢問陣列中是否存...
hdu多校第三場
題意是將給出的數相加計算出 其中p 的倍數的最大個數。由題意可得,在任意兩個數相加時,其模值必在0 p 1之間,將兩數相加的模值替換掉之前的兩個數字,得到長度減一的效果,用0和1 標記對應模值是否出現,從而代表被處理過的但還沒有達到 p 的倍數的值,直到某次得到的模值為 0 時,再清空之前的標記 代...
牛客第三場 J LRU management
起初看到這道題的時候,草草就放過去了,開了另一道題,結果開題不順利,總是感覺差一點就可以做出來,以至於一直到最後都沒能看這道題qaq 題意 類似於作業系統上講的lru演算法,有兩個操作,0操作代表訪問其中的塊,如果命中,將該塊去除放到陣列的末尾,未命中則在陣列末尾加入當前塊,1操作是詢問陣列中是否存...