楼主: newkid

[每日一题] 2022 PUZZLEUP

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
111#
发表于 2022-12-7 19:14 | 只看该作者
bron_kerbosch.py源代码居然是递归的
# Third Party
import numpy as np


######
# MAIN
######


def bron_kerbosch(adj_matrix : np.ndarray, pivot : bool = False) -> list:
    maximal_cliques = []

    def N(v):
        return {i for i, weight in enumerate(adj_matrix[v]) if weight}

    def _bron_kerbosch(R, P, X):
        if not P and not X:
            maximal_cliques.append(R)
        else:
            if pivot:
                u = max(P | X, key=lambda i: len(N(i)))
                _P = P.copy() - N(u)
            else:
                _P = P.copy()

            for v in _P:
                _bron_kerbosch(R | {v}, P & N(v), X & N(v))
                P.remove(v)
                X.add(v)

    R, P, X = set(), set(range(len(adj_matrix))), set()
    _bron_kerbosch(R, P, X)

    return maximal_cliques

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
112#
发表于 2022-12-7 20:44 | 只看该作者
newkid 发表于 2022-11-30 23:59
聪明的办法应该是反证法、抽屉原理之类的逻辑推理方法。笨办法是用图论。棋盘总共9行,每列看作一个二进制 ...

用你链接里的代码,算出来是6,但不知道符合条件的是哪几个数//#include <bits/stdc++.h>
#include <iostream>
using namespace std;
const int a=9;
const int b=5;
const int maxn = 1+(1<<a);
bool mp[maxn][maxn];
int best, n, num[maxn];
bool dfs(int *adj, int total, int cnt)
{
        int t[maxn], k;
        if(total == 0)
        {
                if(cnt > best)
                {
                        best = cnt;
                        return true;         
                }
                return false;
        }
        for(int i = 0; i < total; ++i)
        {
                if(cnt+total-i <= best) return false;         
                if(cnt+num[adj[ i]] <= best) return false;         
                k = 0;
                for(int j = i+1; j < total; ++j)
                if(mp[adj[ i]][adj[j]]) t[k++] = adj[j];
                 
                if(dfs(t, k, cnt+1)) return true;
        }
        return false;
}
int MaximumClique()
{
        int adj[maxn], k;
        best = 0;
        for(int i = n; i >= 1; --i)
        {
                k = 0;
                for(int j = i+1; j <= n; ++j)
                if(mp[ i][j]) adj[k++] = j;
                 
                dfs(adj, k, 1);         
                num[ i] = best;
        }
        return best;
}
int main()
{
        n=maxn-1;
                for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                {int cnt1=0;
                        for(int k=0;k<a;k++)if(((i-1)^(j-1))&(1<<k))cnt1++;
                        if(cnt1>=b)mp[ i][j] = 1;
                }
                cout << MaximumClique() << endl;
        return 0;
}





使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
113#
发表于 2022-12-7 21:07 来自手机 | 只看该作者
FIVE-LETTER CODE

A five-letter code will be created using the letters A, B, C, D and E. If any two codes are required to be different in at least two places, how many codes can be generated at most?

五字母代码

将使用字母A、B、C、D和E创建五个字母的代码。如果要求任意两个代码在至少两个地方不同,最多可以生成多少个代码?

一些代码示例:

AAAAA,AABAB,EDEBC,EEABC…

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
114#
发表于 2022-12-7 21:37 来自手机 | 只看该作者
像上一题的翻版,规模更大

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
115#
发表于 2022-12-7 22:05 来自手机 | 只看该作者
五进制数异或不为0的位大于等于二

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
116#
 楼主| 发表于 2022-12-7 22:35 | 只看该作者
图太大了,硬算很困难,必须用推理方法大量剪枝才有可能算出来。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
117#
发表于 2022-12-8 07:44 来自手机 | 只看该作者
如果4位数,借用昨天的代码是126
int base=5;
int bj(int x,int y)
{
       
        int r=0;
        while(x | y)
        {
                r+=(x%base)!=(y%base);
                x/=base;
                y/=base;
               
        }
        return r;
}

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
118#
发表于 2022-12-8 07:52 来自手机 | 只看该作者
3位数是26,猜5位数是626?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
119#
发表于 2022-12-8 08:45 来自手机 | 只看该作者
应该是625,刚才忘记-1,修改后:
        n=maxn-1;
                for(int i = 1; i <= n; ++i)
                for(int j = 1; j <= n; ++j)
                {int cnt1=bj(i-1,j-1);
                         
                        if(cnt1>=b)mp[ i][j] = 1;
                }

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
120#
发表于 2022-12-8 14:30 | 只看该作者
用4个4位4进制数,已经很多了,考虑上面c程序的结果,sql估计很难

D with a as(select i,[i/pow(4,4-x)::int%4 for x in range(1,5)] AS a from generate_series(0,254)t(i)),
> r as(select a.i n1,b.i n2,count(*)cnt from a,a b, generate_series(1,4)t(x) where a.i<b.i and a.a[x]<>b.a[x] group by a.i,b.i having count(*)>=2)
> select count(*) from r limit 10;
┌──────────────┐
│ count_star() │
│    int64     │
├──────────────┤
│        30861 │
└──────────────┘

with a as(select i,[i/pow(4,4-x)::int考虑%4 for x in range(1,5)] AS a from generate_series(0,254)t(i)),
r as(select a.i n1,b.i n2,count(*)cnt from a,a b, generate_series(1,4)t(x) where a.i<b.i and a.a[x]<>b.a[x] group by a.i,b.i having count(*)>=2)
select n1,count(*) from r group by n1 order by n1 limit 10 ;

┌───────┬──────────────┐
│  n1   │ count_star() │
│ int64 │    int64     │
├───────┼──────────────┤
│     0 │          242 │
│     1 │          242 │
│     2 │          242 │
│     3 │          242 │
│     4 │          239 │
│     5 │          239 │
│     6 │          239 │
│     7 │          239 │
│     8 │          236 │
│     9 │          236 │
├───────┴──────────────┤
│ 10 rows    2 columns │
└──────────────────────┘

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表