首页 > 其他分享 >CF1684G Euclid Guess

CF1684G Euclid Guess

时间:2024-07-24 19:51:38浏览次数:12  
标签:Guess le frac idx int CF1684G now Euclid include

很需要直觉的一个题,想到关键就很简单了

首先注意到允许输出的数对数量很多,完全不用考虑 \(2\times 10^4\) 的限制,那么直觉就是让每个 pair 产生尽可能少的数

首先考虑怎么能只产生一个数,不妨设这个数为 \(x\),则最小的 pair 只能取 \((3x,2x)\),因此 \(\le \frac{m}{3}\) 的数都是能单独产生的

因此很容易想到把数根据和 \(\frac{m}{3}\) 的大小关系分为两种,对于 \(>\frac{m}{3}\) 的数,手玩一下会发现它们不可能同时出现在生成数列中的前两个位置

因此 \(>\frac{m}{3}\) 的数必然需要和若干个 \(\le \frac{m}{3}\) 的匹配才行,但简单手玩发现选超过两个数显然不如直接选头尾两个数来的优

那么问题转化为一个二分图匹配问题,对于 \(a>\frac{m}{3},b\le\frac{m}{3}\),若 \(2a+b\le m\and b\mid a\),则 \(a\) 向 \(b\) 连一条边

最后看所有 \(>\frac{m}{3}\) 的数是否都能匹配即可,多余的 \(\le \frac{m}{3}\) 的数可以自行处理

#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#define int long long
#define RI register int
#define CI const int&
using namespace std;
const int N=1005;
typedef pair <int,int> pi;
int n,m,a[N],vis[N],from[N]; vector <int> A,B,v[N];
inline bool find(CI now,CI idx)
{
    for (auto to:v[now]) if (vis[to]!=idx)
    {
        vis[to]=idx;
        if (from[to]==-1||find(from[to],idx))
        return from[to]=now,1;
    }
    return 0;
}
signed main()
{
    RI i,j; for (scanf("%lld%lld",&n,&m),i=1;i<=n;++i) scanf("%lld",&a[i]);
    for (i=1;i<=n;++i) if (3*a[i]<=m) B.push_back(a[i]); else A.push_back(a[i]);
    for (i=0;i<A.size();++i) for (j=0;j<B.size();++j)
    {
        int a=A[i],b=B[j];
        if (2*a+b>m||a%b!=0) continue;
        v[i].push_back(j);
    }
    memset(from,-1,sizeof(from));
    int res=0; for (i=0;i<A.size();++i) res+=find(i,i+1);
    if (res!=A.size()) return puts("-1"),0;
    vector <pi> ans;
    for (j=0;j<B.size();++j)
    {
        if (from[j]==-1) { ans.push_back(pi(3*B[j],2*B[j])); continue; }
        int a=A[from[j]],b=B[j]; ans.push_back(pi(2*a+b,a+b));
    }
    printf("%lld\n",(int)ans.size());
    for (auto [x,y]:ans) printf("%lld %lld\n",x,y);
    return 0;
}

标签:Guess,le,frac,idx,int,CF1684G,now,Euclid,include
From: https://www.cnblogs.com/cjjsb/p/18321580

相关文章

  • P10553 [ICPC2024 Xi'an I] Guess The Tree 题解
    挺有意思的题。思路考虑一个比较自然的做法。我们每次对于一棵树,我们将它的某一条链抽出来。这样,我们只需要知道这颗树的所有节点与链底的\(\text{lca}\),就可以知道它是属于这条链上哪一个节点的下面。然后就可以递归处理。由于交互库不是自适应的。我们可能可以想到随机......
  • 2024铁三决赛专项题-zip_guessinteger
    2024铁三决赛专项题-zip_guessinteger简介:ZIP包竟然加密了,快上我的暴力破解工具。难道我需要一个量子算力吗?能否使点巧力猜猜?需要使用的工具:bkcrack工具地址:https://github.com/kimci86/bkcrack题目附件上玄机自取:https://xj.edisec.net1.第一层​echo-n'breakthr......
  • #交互,dp#洛谷 7998 [WFOI - 01] 猜数(guess)
    题目传送门分析首先要搞清楚,交互库的自适应会让区间长度尽可能增大(答案自适应)也就是说,如果现在区间为\([l,r]\),你选取的区间为\([l',r']\),那么交互库会让你的区间变成\([l,r'-1]\)和\([l'+1,r]\)中区间更长的那一个,不妨枚举这个长度设\(dp[i]\)表示区间长度为\(i\)......
  • [Zer0pts2020]Can you guess it?
    [Zer0pts2020]Canyouguessit?打开环境没有什么特殊的地方,可以点击按钮查看源码<?phpinclude'config.php';//FLAGisdefinedinconfig.phpif(preg_match('/config\.php\/*$/i',$_SERVER['PHP_SELF'])){exit("Idon'tknowwhatyou......
  • CF1765C Card Guessing 题解
    考虑期望的线性性,求每种情况猜对的概率和,最终再除掉\({4n\choosen,n,n,n}\)。考虑枚举最少的出现次数\(mn\),记四种卡的出现次数分别为\(c_1,c_2,c_3,c_4\),\(c_1+c_2+c_3+c_4=i\lek\),则这种情况的方案数为:\[{i\choosec_1,c_2,c_3,c_4}{4n-i\choosen-c_1,n-c_2,n-c_3,n-c_......
  • 猜数游戏[USACO2008] Haybale Guessing G
    $Haybale\Guessing\G$(猜数游戏)解题报告\(Diffculty:\)\(\color{purple}省选/NOI-\)传送门1:(HZOIER)传送门2:(vjudge)传送门3:(luogu)题面为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。游戏开始前,一头指定的奶牛会在牛棚后......
  • P2898 [USACO08JAN] Haybale Guessing G 题解
    题目传送门前置知识二分答案|并查集解法对条件的合法性判断其他题解已经讲得很明白了,这里不再赘述。这里主要讲一下用并查集实现黑白染色问题。以下内容称被覆盖为黑色,不被覆盖为白色。本题因为是单向染色,即从白到黑,故可类似luoguP1840ColortheAxis和D的并查集或......
  • Codeforces Global Round 17 A. Anti Light's Cell Guessing
    给一个\(n\timesm\)的网格,里面藏了一个炸弹\((x_0,y_0)\)。你可以选择\(k\)个坐标\((x_1,y_1),(x_2,y_2),\cdots,(x_k,y_k)\)。第\(i\)次选择计算机会回复你一个数\(d_i=|x_0-x_i|+|y_0-y_i|\)。至少需要选出多少个坐标才能确定\((x_0,y_0)\)的位......
  • CF1864E Guess Game
    原题翻译非常好的一道题,不过前半部分的逻辑推理比较难理解,这很博弈由于或运算是有\(1\)就为\(1\),因此我们对于一对数\((a,b)\),我们不需要看\(a|b\)中为\(0\)的那些位,因此我们只需要考虑\(a|b\)全\(1\)的情况即可我们考虑一下如果\(Alice\)说"我不知道"说明什么?说明在\(a\)和\(......
  • Pwn-guess[攻防世界]
    0x01基础分析题目中共有两个附件guess和libc-2.27.so先运行guess:captain@ubuntu:~/Desktop$./guess1.Logintoguess2.ExitChoice:和密码账户相关,应该是硬编码写入了程序中,下面通过IDA分析尝试获取密码账户0x02IDA逆向分析一、main函数__int64__fastcallmain(......