Codeforces Beta Round #4 (Div. 2)完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Beta Round #4 (Div. 2)完结相关的知识,希望对你有一定的参考价值。
2022.3.3
题单地址:https://codeforces.com/contest/4
目录
- A. Watermelon【思维】
- B. Before an Exam【贪心】
- C. Registration system【哈希表】
- D. Mysterious Present【DP最长上升子序列的变种】
A. Watermelon【思维】
先切一个2,在看剩余的是二的倍数不是即可。
#include<bits/stdc++.h>
using namespace std;
int main(void)
int n; cin>>n;
n-=2;
if(n>0&&n%2==0) puts("YES");
else puts("NO");
B. Before an Exam【贪心】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,l[N],r[N],sl[N],sr[N];
int main(void)
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>l[i]>>r[i],sl[i]=sl[i-1]+l[i],sr[i]=sr[i-1]+r[i];
if(sr[n]<m||m<sl[n]) puts("NO");//小于最少需要的,或者大于最大的需要的
else
puts("YES");
for(int i=1;i<=n;i++)
m=m-l[i];
if(m>sr[n]-sr[i]) //剩余的还大于剩余的最大值
int temp=min(r[i],l[i]+m-(sl[n]-sl[i]));//拿个最可能拿的,且剩余的还满足后面的需求
cout<<temp<<" ";
m=m-(temp-l[i]);
else cout<<l[i]<<" ";
return 0;
C. Registration system【哈希表】
#include<bits/stdc++.h>
using namespace std;
int n;
map<string,int>mp,st;
int main(void)
cin>>n;
while(n--)
string s; cin>>s;
if(mp.count(s)!=0) cout<<s<<mp[s]<<endl;
else cout<<"OK"<<endl;
mp[s]++;
return 0;
D. Mysterious Present【DP最长上升子序列的变种】
这道题猛地以看特别像最长上升子序列,但是又有点不同就是它是有俩属性的。
那么我们可以先将第一属性从小到大排序,再将属性从大到小排序。
然后跟基本的上升子序列一样,不过比较俩属性就行了。
注意保存转移的过程,只有更优的时候才保存路径,不然会路径混乱。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
struct nodeint w,h,id;s[N];
bool cmp(node a,node b)
if(a.w==b.w) return a.h<b.h;
return a.w<b.w;
int n,w1,h1;
int main(void)
cin>>n>>w1>>h1;
for(int i=1;i<=n;i++)
cin>>s[i].w>>s[i].h;
s[i].id=i;
sort(s+1,s+n+1,cmp);
int f[N]=0,path[N]=0;
for(int i=1;i<=n;i++)
if(s[i].h<=h1||s[i].w<=w1) continue;//说明比要求的最基础的还小
f[i]=1;
for(int j=1;j<i;j++)
if(s[j].h<s[i].h&&s[j].w<s[i].w&&f[i]<f[j]+1)//只有更优才保存路径
path[i]=j;
f[i]=max(f[i],f[j]+1);
int ans=0,u;
for(int i=1;i<=n;i++)
if(f[i]>ans) ans=f[i],u=i;
vector<int>ve;
while(u)
ve.push_back(s[u].id);
u=path[u];
cout<<ans;
if(ans==0) return 0;
cout<<endl;
for(int i=ve.size()-1;i>=0;i--) cout<<ve[i]<<" ";
return 0;
以上是关于Codeforces Beta Round #4 (Div. 2)完结的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Beta Round 84 (Div. 2 Only)
2017-4-16-Train:Codeforces Beta Round #4 (Div. 2 Only)
Codeforces Beta Round #6 (Div. 2)未完结
Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)