当前位置: 首页 > news >正文

Codeforces Round 1003 (Div. 4)

ABCDE略

F

如果这个序列有两个一样的数挨着或者中间只隔一个其他的数,那么这个数就是多数。可以用反证法,构造一个多值序列无法不包含以上两种结构。只需要在树上找这两种结构就可以了

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int T,n,a[N],fat[N],b[N],ans[N];
int ver[N*2],head[N],Next[N*2],tot;
void init()
{
    for(int i=1;i<=n;i++)
    ans[i]=head[i]=fat[i]=0;
    for(int i=1;i<=2*n;i++)
    ver[i]=Next[i]=0;
    tot=0;
}
void add(int x,int y)
{
    ver[++tot]=y;
    Next[tot]=head[x],head[x]=tot;
}
void dfs(int x,int fa)
{
    for(int i=head[x];i;i=Next[i])
    {
        int y=ver[i];
        if(y==fa) continue;
        fat[y]=x;
        dfs(y,x);
    }
}
void bfs()
{
    queue<int> q;
    q.push(1);
    while(q.size())
    {
        int x=q.front();q.pop();
        for(int i=head[x];i;i=Next[i])
        {
            int y=ver[i];
            if(y==fat[x]) continue;
            b[a[y]]++;
            if(b[a[y]]==2) ans[a[y]]=1;
            q.push(y);
        }
        for(int i=head[x];i;i=Next[i])
        {
            int y=ver[i];
            if(y==fat[x]) continue;
            b[a[y]]=0;
        }
    }
}
void solve()
{   
    cin>>n;
    init();
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<n;i++)
    {
        int x,y;
        cin>>x>>y;
        add(x,y),add(y,x);
    }
    dfs(1,-1);
    for(int i=1;i<=n;i++)
    if(a[i]==a[fat[i]]||a[i]==a[fat[fat[i]]]) ans[a[i]]=1;
    bfs();
    for(int i=1;i<=n;i++)
    cout<<ans[i];
    cout<<endl;
}
signed main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>T;
    while(T--) solve();
}

G

先分解质因数,可以构成半质数的有:两个不一样的质数,两个一样且有两个质因数的数,一个质数一个有两个质因数其中的一个和前面的数一样的

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int T,n,a[N],b[N],c[N][2],tot,d[N],zhi,ans,anss;
void init()
{
    tot=zhi=ans=anss=0;
    for(int i=1;i<=n;i++) b[a[i]]=d[a[i]]=0;
}
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    init();
    for(int i=1;i<=n;i++)
    {
        if(a[i]<=3) {b[a[i]]++;zhi++;continue;}
        int m=0,p[N],k=a[i];
        for(int i=2;i<=sqrt(k);i++)
        {
            while(k%i==0) p[++m]=i,k/=i;
        }
        if(k>1) p[++m]=k;
        if(m==1) b[a[i]]++,zhi++;
        if(m==2) 
        {
            c[++tot][0]=p[1],c[tot][1]=p[2];
            ans++;
            if(d[a[i]]) ans+=d[a[i]];
            d[a[i]]++;
        }
    }
    for(int i=1;i<=tot;i++)
    {
        if(b[c[i][0]]) ans+=b[c[i][0]];
        if(c[i][1]!=c[i][0]&&b[c[i][1]]) ans+=b[c[i][1]];
    }
    for(int i=1;i<=n;i++)
    {
        if(b[a[i]]) anss+=b[a[i]]*(zhi-b[a[i]]),b[a[i]]=0;
    }
    cout<<ans+anss/2<<endl;
}
signed main()
{
    std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>T;
    while(T--) solve();
}

相关文章:

  • 心房颤动新机制:ATM/p53通路早期抑制
  • 最新DeepSeek-V3-0324:AI模型性能提升与新特性解析
  • Xshell远程登录腾讯云高性能应用服务
  • 2.基于多线程的TCP服务器实现
  • ASO A/B 测试:解锁数据驱动的应用商店优化
  • Python爬虫异常处理:自动跳过无效URL
  • 笔记整理三
  • ngx_http_index_t
  • mmdetection安装
  • 微软提出 Logic-RL:基于规则的强化学习释放大语言模型推理能力
  • Android ADB工具使用教程(从安装到使用)
  • Centos7 Gitlab17部署
  • k8s部署argocd
  • 多线程导致 EGL_BAD_ACCESS 错误的原理与解决方案
  • 蓝桥杯--bfs专题第二个题目(leetcode103二叉树)
  • 使用事件监听器来处理并发环境中RabbitMQ的同步响应问题
  • Java设计模式--单例模式
  • 计算机四级 - 数据库原理(操作系统部分)- 第8章「死锁」
  • pdfh5 pdf
  • RWA代币化崛起中的香港机遇:数字金融新枢纽的破局之道
  • 做设计什么网站可以兼职/百度seo排名在线点击器
  • 建设了网站怎么管理/沐浴露营销软文
  • 萍乡做网站的公司有哪些/北京seo公司网站
  • 网站设置在哪里找到/广告推广投放平台
  • 做产品的淘宝客网站/成都官网seo厂家
  • wordpress开发工作流/比较好的网络优化公司