每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

Codeforces Global Round 24(B,C)

Codeforces Global Round 24(B,C)

这一次vp真是大失所望,我只写了A ,第二题最后发现离那个答案很近了,但就是没想到,看来还是功力不到家呀

B

这道题的大意是有一个数组,我们可以选择任意两个数x,y,但是x-y>0且x-y不在这个数组里的,是一个新的数据,问我们最大可以使得这一个数组的大小为多少

我一开始是先排序,然后判断a[i]和a[1]是否能整除,因为我想到只有可以整除的时候这个数量就是a[n]/a[1],否则就是a[n],后来我想到6,9虽然能过相互整除,但是最后的答案一定不是9,而是3,后来我看到答案是所有的数的gcd,答案就是最大的那个一个除以最后求出的gcd,恍然大悟

#include <iostream>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int maxn=2e5+10;
int n,t;
void solve()
{
    int mx=0;
    int ans=0;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        int tmp;
        cin>>tmp;
        if (i==1) 
        {
            ans=tmp;
        }
        else 
        {
            ans=__gcd(ans,tmp);
        }
        mx=max(mx,tmp);
    }
    cout<<mx/ans<<'\n';
    return ;
}
int main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

C

这一道题就是连线,但是不可以存在u,v,w,a[u]<=a[v]<=a[w]这样的三个点连接在一起,可以理解为中间的那一个可以是最大的,也可以是最小的,但就是不能是最中间的那一个(对于三个点,两个点的时候可以随便)

我看了大佬的代码,说一下我对代码的理解

有两种情况,

1,ans=n/2,所有的点两两连线

2,如果a[i]!=a[i-1])

ans=(i-1)*(n-i+1)把n个点分开,前i-1作为一个部分,i到n作为一个部分,这两个部分形成二部图

每次找最大的ans

#include <iostream>
#include <stdlib.h>
#include <algorithm>
using namespace std;
const int maxn=2e5+10;
#define int long long 
int n,t;
int a[maxn];
void solve()
{
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    int ans=n/2;
    for(int i=2;i<=n;i++)
    {
			if(a[i]!=a[i-1])
            {
				ans=max(ans,(i-1)*(n-i+1));
			}
	}
    cout<<ans<<'\n';
    return ;
}
signed  main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}
posted @   righting  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示