网站开发 零基础,邢台有限公司,档案网站建设的意义,网页案例刷题刷的好累啊...不想刷题了...然后就来写题解了...
昨天晚上打了场div2..2000来名#xff0c;加了155分....现在rating1281...我是菜鸡..暑假之前就打到了1200分以上了#xff0c;结果暑假一掉再掉#xff0c;直接掉到1100了...然后我就一直压力很大.......
昨天在机房打…刷题刷的好累啊...不想刷题了...然后就来写题解了...
昨天晚上打了场div2..2000来名加了155分....现在rating1281...我是菜鸡..暑假之前就打到了1200分以上了结果暑假一掉再掉直接掉到1100了...然后我就一直压力很大.......
昨天在机房打的..感觉很好以后就在机房打吧....
其实昨天晚上能出D的我的思路很对...但是当时没想太明白还有20分钟的时候就去玩游戏了..
今天早上10分钟该出来了.....
我真的是吐了没办法啊...人总要有遗憾的....
感觉还是比赛过程中感觉D出的太少了就有点不想做了...
其实吧赛后我感觉自己的实力已经完全能够出D题了....
不然感觉这场能加200多分...直接到1300
Problem - C - Codeforces
昨天比赛的C题刚开始的时候没啥思路....
看了样例想了一会发现最后几个反转是最优的..
但到底反转几个呢..看了几个样例发现反转log2n1好像是最优的...
但是样例没过卡在20了...这就尴尬了..
然后我就想着能不能枚举..
发现确实可以n的范围为250完全可以枚举
#includecstdio
#includecmath
#includeiostream
#includealgorithm
#includestring.h
#includequeue
#includestack
#includedeque
#includevector
#includemap
#includeset
#include utility
#include list
using namespace std;
typedef long long ll ;
typedef unsigned long long ull ;
#define pii pairint,int
const int inf 0x3f3f3f3f;//106110956
inline int read(){int x 0, f 1;char ch getchar();while(ch 0 || ch 9){if (ch -)f -1;ch getchar();}while(ch 0 ch 9){x (x1) (x3) (ch^48);ch getchar();}return x * f;
}
void print(__int128 num) {if(num) {print(num/10);putchar(num%100);}
}
int t;
int main(){scanf(%d,t);while(t--){ll ans0;ll n;scanf(%lld,n); for(int kn;k1;k--){ll sum0;ll maxn0;ll jn-k1;for(ll in;in-k1;i--){maxnmax(maxn,i*j);sumsumi*j;j;}for(ll i1;in-k;i){ sumsumi*i;}ansmax(ans,sum-maxn);}printf(%lld\n,ans);}return 0;
}
Problem - D - Codeforces
比较可惜的一道题吧..感觉赛时能出的...
但是我区间合并的时候有点想错了..
我们对区间左端点从小到大排序右端点从大到小排序
对于正在处理的区间的左端点必须小于等于正在合并的区间的b的最大值然后才能合并
这点确实比赛时候没有想清楚今天早上想明白了.但感觉还剩20分钟应该能出来
然后就是二分了
我们可以发现一个规律我们遍历已经合并的区间b的最大值一定是递增的
#includecstdio
#includecmath
#includeiostream
#includealgorithm
#includestring.h
#includequeue
#includestack
#includedeque
#includevector
#includemap
#includeset
#include utility
#include list
using namespace std;
typedef long long ll ;
typedef unsigned long long ull ;
#define pii pairint,int
const int inf 0x3f3f3f3f;//106110956
inline int read(){int x 0, f 1;char ch getchar();while(ch 0 || ch 9){if (ch -)f -1;ch getchar();}while(ch 0 ch 9){x (x1) (x3) (ch^48);ch getchar();}return x * f;
}
void print(__int128 num) {if(num) {print(num/10);putchar(num%100);}
}struct Node{ll l,r,a,b;
}s[200005];struct Node1{ll left,right,a,b;
}d[200005];bool cmp(Node s1,Node s2){if(s1.l!s2.l)return s1.ls2.l;return s1.rs2.r;
}int t;int main(){scanf(%d,t);while(t--){ int n;scanf(%d,n); for(int i1;in;i){scanf(%lld%lld%lld%lld,s[i].l,s[i].r,s[i].a,s[i].b);}sort(s1,s1n,cmp);int q;scanf(%d,q);int cnt1;d[1].lefts[1].l;d[1].rights[1].r;d[1].as[1].a;d[1].bs[1].b;for(int i2;in;i){if(s[i].ld[cnt].b){d[cnt].rightmax(d[cnt].right,s[i].r);d[cnt].amin(d[cnt].a,s[i].a);d[cnt].bmax(d[cnt].b,s[i].b);}else{cnt;d[cnt].lefts[i].l;d[cnt].rights[i].r;d[cnt].as[i].a;d[cnt].bs[i].b;}}while(q--){ll x;scanf(%lld,x);int x11;int x2cnt;ll ansx;while(x1x2){int mid(x1x2)/2;if(d[mid].leftxxd[mid].right){ansmax(ans,d[mid].b);x1mid1;continue;}if(xd[mid].right)x11mid;else x2mid-1;} printf(%lld ,ans);}printf(\n);}return 0;
}
Problem - C - Codeforces
一道双指针的题目..vp的时候感觉自己思路没啥问题...
我们通过样例发现长度为n的排列最小次数为n/2
如果n为偶数的话依次交换