codeforces round 416 div2补题
2017-05-28 17:03
302 查看
第一题,水题
A. Vladik and Courtes
第二题,我想复杂了想到区间求第k大还写了主席树==其实就是暴力的题
B. Vladik
and Complicated Book
c.比赛时写到这题就gg了想不出来。
C. Vladik and Memorable Trip
#include<bits/stdc++.h>
using namespace std;
int a[5100],cnt[5100];
int t[5100][5100];
int dp[5100];
bool vis[5100];
int ans;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]]++;
}
memset(t,-1,sizeof(t));
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
ans=0;
int sum=0;
for(int j=i;j<=n;j++)
{
if(!vis[a[j]])
{
vis[a[j]]=1;
ans=ans^a[j];
sum+=cnt[a[j]];
}
if(sum==j-i+1)
{
t[i][j]=ans;
}
}
}
for(int i=n;i>=1;i--)
{
dp[i]=dp[i+1];
for(int j=i;j<=n;j++)
{
if(t[i][j]!=-1)
dp[i]=max(dp[i],dp[j+1]+t[i][j]);
}
}
cout<<dp[1]<<endl;
}
A. Vladik and Courtes
#include<bits/stdc++.h> using namespace std; int main() { long long a,b; cin>>a>>b; long long t1=0,t2=0; for(int i=1;;i++) { t1=t1+2*i-1; t2=t2+2*i; if(t1>a) { cout<<"Vladik"<<endl; break; } if(t2>b) { cout<<"Valera"<<endl; break; }
} }
第二题,我想复杂了想到区间求第k大还写了主席树==其实就是暴力的题
B. Vladik
and Complicated Book
#include<bits/stdc++.h> using namespace std; const int maxn=1e4+10; int rt[20*maxn]; int sum[20*maxn],ls[20*maxn],rs[20*maxn]; int a[maxn],b[maxn]; int cnt; void build(int& node,int l,int r) { node=++cnt; sum[node]=0; if(l==r) return ; int mid=(l+r)>>1; build(ls[node],l,mid); build(rs[node],mid+1,r); } void update(int& now,int pre,int l,int r,int p) { now=++cnt; ls[now]=ls[pre]; rs[now]=rs[pre]; sum[now]=sum[pre]+1; if(l==r) return ; int mid=(l+r)>>1; if(p>mid) update(rs[now],rs[pre],mid+1,r,p); else update(ls[now],ls[pre],l,mid,p); } int query(int pre,int now,int l,int r,int k) { if(l==r) return b[l]; int mid=(l+r)>>1; int c=sum[ls[now]]-sum[ls[pre]]; if(k<=c) return query(ls[pre],ls[now],l,mid,k); else return query(rs[pre],rs[now],mid+1,r,k-c); } int main() { int t,n,m,ql,qr,k; cnt=0; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",a+i); b[i]=a[i]; } sort(b+1,b+1+n); int len=unique(b+1,b+1+n)-(b+1); build(rt[0],1,len); for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+len,a[i])-b; for(int i=1;i<=n;i++) update(rt[i],rt[i-1],1,len,a[i]); for(int i=1;i<=m;i++) { scanf("%d %d %d",&ql,&qr,&k); if(k>qr||k<ql) { cout<<"Yes"<<endl; continue; } int tmp=query(rt[ql-1],rt[qr],1,len,k-ql+1); if(tmp==a[k]) cout<<"Yes"<<endl; else cout<<"No"<<endl;}
c.比赛时写到这题就gg了想不出来。
C. Vladik and Memorable Trip
#include<bits/stdc++.h>
using namespace std;
int a[5100],cnt[5100];
int t[5100][5100];
int dp[5100];
bool vis[5100];
int ans;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]]++;
}
memset(t,-1,sizeof(t));
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
ans=0;
int sum=0;
for(int j=i;j<=n;j++)
{
if(!vis[a[j]])
{
vis[a[j]]=1;
ans=ans^a[j];
sum+=cnt[a[j]];
}
if(sum==j-i+1)
{
t[i][j]=ans;
}
}
}
for(int i=n;i>=1;i--)
{
dp[i]=dp[i+1];
for(int j=i;j<=n;j++)
{
if(t[i][j]!=-1)
dp[i]=max(dp[i],dp[j+1]+t[i][j]);
}
}
cout<<dp[1]<<endl;
}
相关文章推荐
- Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
- Codeforces Round #416 (Div. 2) C - Vladik and Memorable Trip
- Codeforces Round #416 (Div. 2)A B C 水 暴力 dp
- Codeforces Round #416 (Div. 2) C Vladik and Memorable Trip
- Codeforces Round #Pi (Div. 2)567D One-Dimensional Battle Ships(set)
- Codeforces Round #277.5(Div. 2) C. Given Length and Sum of Digits...【贪心】
- Codeforces Round #170 (Div. 2) problem B
- Codeforces Round #265 (Div. 2) C. No to Palindromes!
- Codeforces Round #375 (Div. 2) C
- Codeforces Round #277.5(Div. 2) F. Special Matrices【思维+Dp】好题~好题~
- Codeforces Round #362 (Div. 1) 题解(待续)
- Codeforces Round #360 (Div. 1) D Dividing Kingdom II(并查集+暴力) ★ ★
- 【Codeforces Round 332 (Div 2)B】【扭转题意 位置映射】Spongebob and Joke 给b[]中的每个数找f[]中的位置
- 【Codeforces Round 334 (Div 2)C】【脑洞】Alternative Thinking 最多反转一个区间使得最长跳跃子串的长度尽可能长
- Codeforces Round #204 (Div. 2) A.Jeff and Digits
- Codeforces Round #437 (Div. 1) C - Gotta Go Fast
- Codeforces Round #241 (Div. 2)
- Codeforces Round #296 (Div. 2)——A.B.C.D
- codeforces Intel Code Challenge Final Round (div.1 + div.2 combined)
- Codeforces Round #459 (Div. 2)-D(dfs暴力)