ec round 91

由于cf前面的题目遗留太多,虽然每一天都在补做一场,但是题解并没有记录。

这场重新开始……

 

B

其实参透了cf的出数据套路之后,官方数据的解释基本都不是正解……

那么我们考虑每循环一次都要赢很多,我们不就可以判断哪种最多,直接找到克他的全部输出出来就好了?

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
#define ri register int
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 1e6+10;
const int INF = 0x3f3f3f3f; 
const int mod = 1e9+7;
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;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
int t,len,i,sum1,sum2,sum3;
char s[maxn];
int main()
{
    t=read();
    while (t--)
    {
        scanf("%s",s+1);
        len=strlen(s+1);
        sum1=sum2=sum3=0;
        for (i=1;i<=len;i++)
        {
            if (s[i]=='R') sum1++;
            if (s[i]=='S') sum2++;
            if (s[i]=='P') sum3++;
        }
        if (sum1>=sum2 && sum1>=sum3) 
        {
            for (i=1;i<=len;i++)cout<<"P";
            cout<<endl;
            continue;
        }
        if (sum2>=sum1 && sum2>=sum3) 
        {
            for (i=1;i<=len;i++)cout<<"R";
            cout<<endl;
            continue;
        }
        if (sum3>=sum1 && sum3>=sum2) 
        {
            for (i=1;i<=len;i++)cout<<"S";
            cout<<endl;
            continue;
        }
    }
    return 0;
}
View Code

 

C

排个序就行

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
#define ri register int
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 1e6+10;
const int INF = 0x3f3f3f3f; 
const int mod = 1e9+7;
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;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
int t,n,x,i,a[maxn],number,ans;
ll sum;
int main()
{
    t=read();
    while (t--)
    {
        n=read(),x=read();
        for (i=1;i<=n;i++) a[i]=read();
        sort(a+1,a+1+n);
        reverse(a+1,a+1+n);
        number=sum=ans=0;
        for (i=1;i<=n;i++)
        {
            number++;
            if (x<=1ll*number*a[i])
            {
                ans++;
                number=0;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
View Code

 

E

对于编号相邻的圆盘多个圆盘,在后续移动里面,肯定是一起移的,所以答案和每个塔中“编号相邻的圆盘”的对数有关,模拟几组数据可得,当每一次所有塔中“相邻对”的数量和为x,答案为 n-x+1。

又因为题目的意思,两个塔合并为一个塔之后,这个塔可能是在这两个位置中的其中一个。所以我们运用并查集,把这两个塔的位置建立联系。

但是两个塔合并为一个塔之后,编号相邻的圆盘的对数肯定会有所增加,那么我们就暴力循环其中一个塔里面的所有圆盘,如果这个圆盘与另个塔的某个圆盘是编号相邻,那么对数++,合并完后算出答案。

#include <bits/stdc++.h>
#define debug freopen("r.txt","r",stdin)
#define mp make_pair
#define ri register int
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 1e6+10;
const int INF = 0x3f3f3f3f; 
const int mod = 1e9+7;
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;}
ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;}
int fa[maxn],n,m,i,a[maxn],siz[maxn],sum,x,pos[maxn],y;
vector<int> G[maxn];
int find(int x)
{
if (x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
void unite(int x,int y)
{
    int xx=find(x),yy=find(y);
    if (siz[xx]>siz[yy]) swap(xx,yy);
    siz[yy]+=siz[xx]; 
    for (ri i=0;i<siz[xx];i++)
    {
        if (G[xx][i]>1 &&find(G[xx][i]-1)==yy)sum++;
        if (G[xx][i]<n &&find(G[xx][i]+1)==yy)sum++;
    }
    while (G[xx].size()) 
        G[yy].pb(G[xx].back()),G[xx].pop_back();
    fa[xx]=fa[yy];
    siz[xx]=0;
}
int main()
{
    n=read(),m=read();
    for (i=1;i<=n;i++)  fa[i]=i,G[i].pb(i),siz[i]=1;
    for (i=1;i<=n;i++) 
    {
        a[i]=read();
        if(pos[a[i]]) unite(pos[a[i]],i);
        pos[a[i]]=i;
    }
    printf("%d\n",n-sum-1);
    for (i=1;i<m;i++)
    {
        x=read();y=read();
        unite(pos[x],pos[y]);
        printf("%d\n",n-sum-1);
    } 

    return 0;
}
View Code

 

posted @ 2020-09-06 23:50  Y-KnightQin  阅读(198)  评论(0)    收藏  举报