博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #353 (Div. 2)
阅读量:6000 次
发布时间:2019-06-20

本文共 3557 字,大约阅读时间需要 11 分钟。

A.首先判断c==0?true的话判断a==b。否的话判断(b-a)与c是否同号,能否整除。

/*ID: onlyazh1LANG: C++TASK: test*/#include
using namespace std;typedef long long ll;const int maxn=1e6+7;int main(){ ll a,b,c; cin>>a>>b>>c; if(c==0) cout<<(a==b?"YES":"NO")<
=0) cout<<"YES"<
View Code

B.设mx为a+b,a+c,b+d,c+d中的最大值。mi为a+b,a+c,b+d,c+d中的最小值。则答案就是n*max(0,(n+mi-mx))。注意n+mi-mx可能为负。

/*ID: onlyazh1LANG: C++TASK: test*/#include
using namespace std;typedef long long ll;const int maxn=1e6+7;int main(){ ll n,a,b,c,d; cin>>n>>a>>b>>c>>d; ll mi=min(a+b,a+c); mi=min(mi,min(b+d,c+d)); ll mx=max(a+b,a+c); mx=max(mx,max(b+d,c+d)); cout<
View Code

C.看了题解才会的。假设一个长度为l,连续和为0的段。那么我们的操作应该是l-1次。假设我们把现在的序列分成了k个连续和为0的段。那么我们的操作应该是n-k次。那么我们应该让k最大。那么前缀和中出现的最大次数就是我们的k。

/*ID: onlyazh1LANG: C++TASK: test*/#include
using namespace std;typedef long long ll;const int maxn=1e6+7;int cnt[100100];int main(){ //ifstream cin("in.txt"); int n; cin >> n; map
d; long long sum = 0; int ans = n - 1; for (int i = 0; i < n; i++) { int t; cin >> t; sum += t; d[sum]++; ans = min(ans, n - d[sum]); } cout << ans << endl; return 0;}
View Code

D.用一个set记录到第i个数字为止,已经插入了的数字。那么第i个数字必然插在set中与他相邻的两个数字的某一个下面。容易发现,新的数字应该插在深度较深的数字下面。证明暂时不会。

/*ID: onlyazh1LANG: C++TASK: test*/#include
using namespace std;typedef long long ll;const int maxn=1e6+7;set
S;map
M;int val[maxn];int ans[maxn];int dep[maxn];int main(){ int n,t,idx; set
::iterator pre,nex,tmp; cin>>n; for(int i=0;i
>t;M[t]=i;val[i]=t; if(i){ nex=S.lower_bound(t); if(nex==S.begin()) ans[i]=M[*nex]; else{ tmp=nex;pre=(--nex);nex=tmp; ans[i]= dep[M[*pre]]>dep[M[*nex]]?M[*pre]:M[*nex]; } } S.insert(t); dep[i]=dep[ans[i]]+1; } for(int i=1;i
View Code

E.

/*ID: onlyazh1LANG: C++TASK: test*/#include
using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1typedef long long ll;const int maxn=1e6+7;pair
mx[maxn<<2];int to[maxn];ll sum[maxn];int n;void PushUP(int rt){ if(mx[rt<<1].first>=mx[rt<<1|1].first) mx[rt]=mx[rt<<1]; else mx[rt]=mx[rt<<1|1];}void update(int p,int x,int l,int r,int rt){ if(l==r){ mx[rt].first=x; mx[rt].second=l; return ; } int m=(l+r)/2; if(p<=m) update(p,x,lson); else update(p,x,rson); PushUP(rt);}pair
query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R){ return mx[rt]; } int m=(l+r)/2; pair
ret1,ret2; ret1.first=ret2.first=-1; if(L<=m) ret1=query(L,R,lson); if(R>m) ret2=query(L,R,rson); return ret1.first>=ret2.first?ret1:ret2;}ll add(int x){ if(x==n) return sum[x]=0; pair
px=query(x,to[x],1,n,1); if(px.second==x) return sum[x]=(n-x)+(sum[px.first]==-1?add(px.first):sum[px.first]); else return sum[x]=(n-x+px.second-to[x])+(sum[px.second]==-1?add(px.second):sum[px.second]);}int main(){ //ifstream cin("in.txt"); memset(sum,-1,sizeof(sum)); cin>>n; for(int i=1;i
>to[i]; update(i,to[i],1,n,1); }// pair
px=query(1,to[1]-1,1,n,1);// cout<
<<" "<
<
View Code

 

转载于:https://www.cnblogs.com/onlyAzha/p/5504745.html

你可能感兴趣的文章
keycloak管理用户权限
查看>>
Activity Test1
查看>>
微信小程序------MD5加密(支持中文和不支持中文)和网络请求(get和post)
查看>>
虚拟机中ubuntu不能联网问题的解决——NAT方式
查看>>
xml的Dom4j解析规则
查看>>
iOS UI基础-21 WKWebView
查看>>
android------锁屏(手机启动出现锁屏界面)
查看>>
[Tools] Wireshark Primer Tutorials
查看>>
记一次Linux系统安装的异常(AMI配置)
查看>>
[svc][cpu][jk]cpu的核心查看及什么是cpu的负载
查看>>
MVC+三层+ASP.NET简单登录验证
查看>>
SUSE Linux Enterprise Serve 12 试用体验
查看>>
nl2br()与nl2p()函数,php在字符串中的新行(\n)之前插入换行符
查看>>
python+selenium+requests爬取我的博客粉丝的名称
查看>>
Status Code:405 Method Not Allowed
查看>>
puppet(1)-简介
查看>>
nodejs npm 使用淘宝 NPM 镜像
查看>>
php中命名空间和use
查看>>
MongoDb进阶实践之三 Mongodb基本命令详解
查看>>
MySQL存储过程详解 mysql 存储过程
查看>>