10.26 Educational Codeforces Round 62 (Rated for Div. 2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/JiangHxin/article/details/102761536

总结:

小组4/3/2题 ,有待提升,不过相比上次的0/1/1的情况已经好多了。
缺点:

  1. 英语阅读不行。
  2. 题目做得太少。

A. Detective Book

思路:熟悉的题目,不知道哪里做过,遍历取最大值,与i相等时ans++。

#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
   ll s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
 
const int manx=2e5+5;
ll a[manx];
 
int main()
{
    ll n;
    n=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    ll ans=0,res=-1;
    for(int i=1;i<=n;i++)
    {
        if(res!=a[i]) res=max(res,a[i]);
        if(res==i) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

B. Detective Book

思路:真的熟悉二连发,取min(左边最近的>,右边最远的<)。

#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
   ll s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
 
const int manx=2e5+5;
ll a[manx];
 
int main()
{
    ll q;
    q=read();
    while(q--)
    {
        string s;
        int n;
        cin>>n>>s;
        int l=0,r=0;
        for(int i=0;i<n;i++) if(s[i]!='>') l++;
        else break;
        for(int i=n-1;i>=0;i--) if(s[i]!='<') r++;
        else break;
        cout<<min(l,r)<<endl;
    }
    return 0;
}

C - Playlist

思路:周二的时候虚拟打了一场div3,里面的1249B2跟这题有异曲同工之妙,先对美丽值排序,然后用优先队列维护长度,当队列元素满足k个时,弹出顶端的长度最小值。

 #include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
   ll s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
 
const int manx=3e5+5;
 
struct node{
    ll l,r;
}a[manx];
 
bool cmp(node a, node b)
{
    if(a.r==b.r) return a.l<b.l;
    else return a.r>b.r;
}
int main()
{
    ll n,m;
    n=read();
    m=read();
    for(int i=1;i<=n;i++)
        a[i].l=read(),a[i].r=read();
    sort(a+1,a+1+n,cmp);
    priority_queue<ll>q;
    ll ans=0,res,ans1,ans2=0;
    for(int i=1;i<=n;i++){
        res=a[i].r;
        while(q.size()==m){
            ans-=q.top()*(-1);
            q.pop();
        }
        q.push(-a[i].l);
        ans+=a[i].l;
        ans1=ans*res;
        if(ans1>ans2) ans2=ans1;
    }
    cout<<ans2<<endl;
    return 0;
}

D - Minimum Triangulation

思路:画图,画出3456的情况,可以发现每次跟1相连便是最小的答案。

#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
   ll s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
 
const int manx=1e3+5;
 
ll a[manx];
int main()
{
    ll n=read();
    a[3]=6;
    a[4]=18;
    for(int i=5;i<=n;i++) a[i]=a[i-1]+i*(i-1);
    cout<<a[n]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/JiangHxin/article/details/102761536