首页 > 其他分享 >CF1994D Funny Game

CF1994D Funny Game

时间:2024-08-27 20:53:44浏览次数:10  
标签:Funny 连通 set cout int CF1994D Game

前言

妙不可言~~~

思路

想不到啊想不到

观察到样例全输出 \(YES\) ,则我们从最不容易满足的 \(n-1\) 开始,一直到 \(1\),暴力匹配边

然后发现是正解

仔细想想才发现,每次操作后相当于减少一个连通块,而对于第 \(i\) 次操作,则会剩下 \(i-1\) 个连通块,根据 鸽巢原理 必定有存在两个连通块可以连边,即 \(mod\) \(i\) 的余数相同

实现的话怎么实现都可以 我用 \(set\) 和 \(map\) 乱搞

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int a[N];
int fa[N];
pair<int,int> b[N];
set<int> s[N];
int find(int x)
{
	//cout<<x<<"\n";
    if(fa[x]==x)
    {
        return fa[x];
    }
    fa[x]=find(fa[x]);
    return fa[x];
}
int main()
{
    int _;
    cin>>_;
    while(_--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++) fa[i]=i;
        for(int i=n-1;i>=1;i--)
        {
        	//cout<<i<<"\n";
            for(int j=0;j<=n;j++) s[j].clear();
            for(int j=1;j<=n;j++)
            {
            	//cout<<a[j]%i<<" "<<u<<"\n";
                s[a[j]%i].insert(j);
            }
            //puts("");
            for(int j=0;j<i;j++)
            {
                if(s[j].size()>=2)
                {
                    int u=*s[j].begin();
                    int v=*(--s[j].end());
                    //cout<<u<<" "<<v<<"\n";
                    fa[find(u)]=find(v);
                    b[i]={u,v};
                    break;
                }
            }
        }
        //cout<<find(1)<<"\n";
        puts("YES");
        for(int i=1;i<n;i++)
        {
            printf("%d %d\n",b[i].first,b[i].second);
        }
    }
}

标签:Funny,连通,set,cout,int,CF1994D,Game
From: https://www.cnblogs.com/Oistream/p/18383517

相关文章

  • pygame手搓贪吃蛇
    代码:#coding=utf-8importos,sys,re,timeimportpygameimportrandomfromwin32apiimportGetSystemMetricsimportcopypygame.init()pygame.display.set_caption("贪吃蛇")percent=0.6screen_width=GetSystemMetrics(0)screen_height=GetSystemM......
  • 《魔兽世界》游戏崩溃弹窗“找不到gamede.dll文件”该怎么办?魔兽世界游戏闪退提示缺少
    在玩《魔兽世界》时,游戏崩溃并弹窗提示“找不到gamede.dll文件”,这十分令人头疼。玩家可以尝试重新安装游戏、检查文件完整性,或者在网上查找可靠的该文件资源进行补充,以此来解决这个棘手的问题。本篇将为大家带来《魔兽世界》游戏崩溃弹窗“找不到gamede.dll文件”该怎么办的内......
  • AlphaGo Zero论文《Mastering the game of Go without human knowledge》阅读笔记
    AlphaGoZero论文阅读笔记原论文:《MasteringthegameofGowithouthumanknowledge》简述:论文提出了一种新的围棋人工智能算法AlphaGoZero,该算法可以在完全无监督的情况下进行训练,并且超越了之前的AlphaGoFan和AlphaGoLee的表现。该算法具有如下特点:在无监督的情况......
  • pygame手搓五子棋
    代码:#coding=utf-8importos,sys,re,timeimportpygameimportrandomfromwin32apiimportGetSystemMetricspygame.init()pygame.display.set_caption("五子棋")percent=0.6screen_width=GetSystemMetrics(0)screen_height=GetSystemMetrics(1)wi......
  • SP10502 VIDEO - Video game combos 题解
    题目传送门前置知识AC自动机解法多模式串匹配考虑AC自动机。令\(f_{i,j}\)表示前\(i\)个字符,当前运行到AC自动机的状态\(j\)时的最大得分。状态转移方程为\(f_{i,k}=\max\limits_{k\inSon(j)}\{f_{i-1,j}+sum_{k}\}\),其中\(sum_{k}\)表示fail树上以\(k......
  • gameobject_template | gameobject_template_addon
    目录gameobject_templateentrytypedisplayIdIconNameContentTuningIdAINamegameobject_template_addon factionflagsgameobject_templateentry gameobject模板的IDtype gameobject模板类型,取值参考源码GameObjectData.h的structGameObjectTemplat......
  • Twenty Lectures on Algorithmic Game Theory 算法博弈论二十讲 Lecture 5 Revenue-Ma
    TwentyLecturesonAlgorithmicGameTheory算法博弈论二十讲Lecture5Revenue-MaximizingAuctions(上)Lecture5Revenue-MaximizingAuctions第2至第4讲聚焦于设计能够最大化社会福利的机制,无论是精确还是近似。这类机制的收益产生仅仅是副作用,是激励代理人如实......
  • pygame各类形状
    代码:#coding=utf-8importos,sys,re,time,mathimportpygameimportrandomfromwin32apiimportGetSystemMetricsfrommathimportpipygame.init()pygame.display.set_caption("各种形状测试")percent=0.6screen_width=GetSystemMetrics(0)screen_hei......
  • pygame物体碰撞
    代码:#coding=utf-8importos,sys,re,timeimportpygameimportrandomimportmathfromwin32apiimportGetSystemMetricsfromtkinterimportmessageboxpygame.init()pygame.display.set_caption("我的游戏")percent=0.6screen_width=GetSystemMetri......
  • 使用 Pygame 创建简单的移动方块游戏
    Pygame是一个用于开发图形和多媒体应用的优秀Python库。下面,我们将逐步解释如何创建一个简单的游戏,其中一个蓝色方块可以在屏幕上移动。 安装Pygame首先,确保你已经安装了Pygame。可以通过以下命令安装:pipinstallpygame 游戏结构1.初始化Pygame开始时,需......