vp总结(表现分数
:1450)
(表现分数x:即cf_rating大于x,开始下分,小于x上分)
d,e比c简单。写c写着写着,睡着了,你敢信
其实可以先开d和e的。
A. Math Problem
题意:
给你n个区间,现要求你找到一个区间,使他与所有区间都有交集。
输出:
这个区间的长度
思路:
a
n
s
l
=
m
i
n
(
r
1
,
r
2
,
r
3
.
.
.
)
ans_l=min(r_1,r_2,r_3...)
ansl=min(r1,r2,r3...)
a
n
s
r
=
m
a
x
(
l
1
,
l
2
,
l
3
.
.
.
)
ans_r=max(l_1,l_2,l_3...)
ansr=max(l1,l2,l3...)
如果
a
n
s
r
−
a
n
s
l
ans_r-ans_l
ansr−ansl>0,输出
a
n
s
r
−
a
n
s
l
ans_r-ans_l
ansr−ansl即可。
反之输出0.说明有交集。
AC
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--){//for(int i)
int n;cin>>n;
int ans_l=1e9+7,ans_r=0;
int l,r;
for(int i=1; i<=n; i++){
cin>>l>>r;
ans_l=min(ans_l,r);
ans_r=max(ans_r,l);
}
if(ans_l>=ans_r)cout<<0<<endl;
else cout<<ans_r-ans_l<<endl;
}
return 0;
}
B. Box(暴力构造)
题意:
给你一个前缀最大值,
要求你构造一个数组,满足前缀最大值。
思路:
- 能处理先处理
可以知道,假如 p r e [ i ] pre[i] pre[i]没被使用过,那么 a n s [ i ] = p r e [ i ] ans[i]=pre[i] ans[i]=pre[i].
其他位置先空着。 - 查漏补缺。
假如当前位置,没有元素,那么就找一个值放进去。可以从1开始检索值。(为了减少时间复杂度,可以从cnt开始,cnt前的数肯定被使用过。如果cnt>pre[i],那么就输出-1)
AC
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
int vis[maxn],mx[maxn];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//cout << "Hello world!" << endl;
int T;cin>>T;
while(T--){
int n;cin>>n;
vector<int>ans(n+1,-1);
for(int i=1; i<=n; i++)vis[i]=0;
int flag=1;
for(int i=1; i<=n; i++){
cin>>mx[i];
if(vis[mx[i]])continue;
vis[mx[i]]=1;
ans[i]=mx[i];
}
int cnt=1;
for(int i=1; i<=n&&flag; i++){
if(ans[i]!=-1)continue;
while(vis[cnt])cnt++;
if(cnt<=mx[i])ans[i]=cnt++;
else flag=0;
}
if(!flag)cout<<-1;
else for(int i=1; i<=n; i++)cout<<ans[i]<<' ';//for(auto x:ans)cout<<x<<' ';
cout<<endl;
}
return 0;
}
C. Messy(排序思想&&构造)
题意;
给你一个括号表达式,要求你对substirng进行reverse。使得括号表达式,满足算术表达式,且有k个前缀合法。
思路:
- 一开始肯定就是构造一个ans。
- 之后根据这个ans去reverse(reverse过程的思路和
暴力
排序的思想差不多),因为题目说不要求操作最小,所以可以暴力。
AC
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define mp make_pair
using namespace std;
typedef pair<int,int>pa;
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int tt;cin>>tt;
while(tt--){
int n,k;cin>>n>>k;
string s;cin>>s;
string t;
for(int i=0; i<k; i++)t+="()";//ans.push_back("()");
while(t.size()<n)t=t.substr(0,t.size()-1)+"())";
vector<pa>ans;
for(int i=0; i<n; i++){
int ok=0;
for(int j=i; j<n&&!ok; j++){
if(s[j]==t[i]){
reverse(s.begin()+i,s.begin()+j+1);
ans.push_back(mp(i+1,j+1));//cout<<i+1<<' '<<j+1<<endl;
ok=1;
}
}
}
cout<<ans.size()<<endl;
for(auto x:ans)cout<<x.first<<' '<<x.second<<endl;
}
return 0;
}