画外旅照·SAT

· · 科技·工程

起因是真空发了个视频说一个队伍领完所有奖励。

我寻思的话要全金标至少十个人,但是一个队伍也最多放十个人,还有苛刻的条件,所以就不用考虑金标了,直接看怎么全奖励。但是好像又太简单了点,所以规定一个队伍带四个人。这里假设旅行者不能切换元素。

不是精确覆盖,舞蹈链没用,但是数据范围挺小,直接暴力即可。

以下代码应该不需要解释,是针对浮露之章写的,可以改改得到其他画外旅照的要求偷走拿去做其他事情。

第一个是稀有度,第二个是元素(火水风雷草冰岩),第三个是武器(单双长法弓),第四个是国家(蒙璃稻须枫),第五个是芒荒。

当然,中间有个判断条件限制只用四星或旅行者,删去后解的数量会更多。这里有一个压行的 tio.run 的链接。

#include<iostream>
#include<string>
#include<tuple>
#include<vector>
using ch=std::tuple<std::string,int,int,int,int,int>;
using co=std::tuple<int,int,int,int>;
const std::vector<ch>vch{
ch{"Albedo"     ,5,1<<6,1<<0,1<<0,0},
ch{"Alhaitham"  ,5,1<<4,1<<0,1<<3,0},
ch{"Aloy"       ,5,1<<5,1<<4,0,0},
ch{"Amber"      ,4,1<<0,1<<4,1<<0,0},
ch{"Arataki_Itto",5,1<<6,1<<1,1<<2,0},
ch{"Arlecchino" ,5,1<<0,1<<2,1<<6,0},
ch{"Baizhu"     ,5,1<<4,1<<3,1<<1,0},
ch{"Barbara"    ,4,1<<1,1<<3,1<<0,0},
ch{"Beidou"     ,4,1<<3,1<<1,1<<1,0},
ch{"Bennett"    ,4,1<<0,1<<0,1<<0,0},
ch{"Candace"    ,4,1<<1,1<<2,1<<3,0},
ch{"Charlotte"  ,4,1<<5,1<<3,1<<4,1<<0},
ch{"Chevreuse"  ,4,1<<0,1<<2,1<<4,1<<1},
ch{"Chiori"     ,5,1<<6,1<<0,1<<2,0},
ch{"Chongyun"   ,4,1<<5,1<<1,1<<1,0},
ch{"Clorinde"   ,5,1<<3,1<<0,1<<4,1<<1},
ch{"Collei"     ,4,1<<4,1<<4,1<<3,0},
ch{"Cyno"       ,5,1<<3,1<<2,1<<3,0},
ch{"Dehya"      ,5,1<<0,1<<1,1<<3,0},
ch{"Diluc"      ,5,1<<0,1<<1,1<<0,0},
ch{"Diona"      ,4,1<<5,1<<4,1<<0,0},
ch{"Dori"       ,4,1<<3,1<<1,1<<3,0},
ch{"Eula"       ,5,1<<5,1<<1,1<<0,0},
ch{"Faruzan"    ,4,1<<2,1<<4,1<<3,0},
ch{"Fischl"     ,4,1<<3,1<<4,1<<0,0},
ch{"Freminet"   ,4,1<<5,1<<1,1<<4,1<<0},
ch{"Furina"     ,5,1<<1,1<<0,1<<4,1<<0|1<<1},
ch{"Gaming"     ,4,1<<0,1<<1,1<<1,0},
ch{"Ganyu"      ,5,1<<5,1<<4,1<<1,0},
ch{"Gorou"      ,4,1<<6,1<<4,1<<2,0},
ch{"Hu_Tao"     ,5,1<<0,1<<2,1<<1,0},
ch{"Jean"       ,5,1<<2,1<<0,1<<0,0},
ch{"Kaedehara_Kazuha",5,1<<2,1<<0,1<<2,0},
ch{"Kaeya"      ,4,1<<5,1<<0,1<<0,0},
ch{"Kamisato_Ayaka",5,1<<5,1<<0,1<<2,0},
ch{"Kamisato_Ayato",5,1<<1,1<<0,1<<2,0},
ch{"Kaveh"      ,4,1<<4,1<<1,1<<3,0},
ch{"Keqing"     ,5,1<<3,1<<0,1<<1,0},
ch{"Kirara"     ,4,1<<4,1<<0,1<<2,0},
ch{"Klee"       ,5,1<<0,1<<3,1<<0,0},
ch{"Kujou_Sara" ,4,1<<3,1<<4,1<<2,0},
ch{"Kuki_Shinobu",4,1<<3,1<<0,1<<2,0},
ch{"Layla"      ,4,1<<5,1<<0,1<<3,0},
ch{"Lisa"       ,4,1<<3,1<<3,1<<0,0},
ch{"Lynette"    ,4,1<<2,1<<0,1<<4,1<<1},
ch{"Lyney"      ,5,1<<0,1<<4,1<<4,1<<0},
ch{"Mika"       ,4,1<<5,1<<2,1<<0,0},
ch{"Mona"       ,5,1<<1,1<<3,1<<0,0},
ch{"Nahida"     ,5,1<<4,1<<3,1<<3,0},
ch{"Navia"      ,5,1<<6,1<<1,1<<4,1<<1},
ch{"Neuvillette",5,1<<1,1<<3,1<<4,1<<0},
ch{"Nilou"      ,5,1<<1,1<<0,1<<3,0},
ch{"Ningguang"  ,4,1<<6,1<<3,1<<1,0},
ch{"Noelle"     ,4,1<<6,1<<1,1<<0,0},
ch{"Qiqi"       ,5,1<<5,1<<0,1<<1,0},
ch{"Raiden_Shogun",5,1<<3,1<<2,1<<2,0},
ch{"Razor"      ,4,1<<3,1<<1,1<<0,0},
ch{"Rosaria"    ,4,1<<5,1<<2,1<<0,0},
ch{"Sangonomiya_Kokomi",5,1<<1,1<<3,1<<2,0},
ch{"Sayu"       ,4,1<<2,1<<1,1<<2,0},
ch{"Sethos"     ,4,1<<3,1<<4,1<<3,0},
ch{"Shenhe"     ,5,1<<5,1<<2,1<<1,0},
ch{"Shikanoin_Heizou",4,1<<2,1<<3,1<<2,0},
ch{"Sigewinne"  ,5,1<<1,1<<4,1<<4,1<<1},
ch{"Sucrose"    ,4,1<<2,1<<3,1<<0,0},
ch{"Tartaglia"  ,5,1<<1,1<<4,1<<6,0},
ch{"Thoma"      ,4,1<<0,1<<2,1<<2,0},
ch{"Tighnari"   ,5,1<<4,1<<4,1<<3,0},
ch{"Traveler_Anemo",5,1<<2,1<<0,0,0},
ch{"Traveler_Dendro",5,1<<4,1<<0,0,0},
ch{"Traveler_Electro",5,1<<3,1<<0,0,0},
ch{"Traveler_Geo",5,1<<6,1<<0,0,0},
ch{"Traveler_Hydro",5,1<<1,1<<0,0,1<<0},
ch{"Venti"      ,5,1<<2,1<<4,1<<0,0},
ch{"Wanderer"   ,5,1<<2,1<<3,1<<3,0},
ch{"Wriothesley",5,1<<5,1<<3,1<<4,1<<1},
ch{"Xiangling"  ,4,1<<0,1<<2,1<<1,0},
ch{"Xianyun"    ,5,1<<2,1<<3,1<<1,0},
ch{"Xiao"       ,5,1<<2,1<<2,1<<1,0},
ch{"Xingqiu"    ,4,1<<1,1<<0,1<<1,0},
ch{"Xinyan"     ,4,1<<0,1<<1,1<<1,0},
ch{"Yae_Miko"   ,5,1<<3,1<<3,1<<2,0},
ch{"Yanfei"     ,4,1<<0,1<<3,1<<1,0},
ch{"Yaoyao"     ,4,1<<4,1<<2,1<<1,0},
ch{"Yelan"      ,5,1<<1,1<<4,1<<1,0},
ch{"Yoimiya"    ,5,1<<0,1<<4,1<<2,0},
ch{"Yun_Jin"    ,4,1<<6,1<<2,1<<1,0},
ch{"Zhongli"    ,5,1<<6,1<<2,1<<1,0}};
const std::vector<co>vco{
co{1<<2,0,1<<0,0},
co{1<<1,0,0,1<<0},
co{1<<0,1<<1,0,0},
co{1<<5,0,1<<4,0},
co{1<<6,1<<2,0,0},
co{1<<3,1<<0,0,0},
co{1<<5,0,1<<1,0},
co{1<<4,1<<4,0,0},
co{1<<3,0,1<<2,0},
co{1<<2,1<<3,0,0},
co{1<<4,0,1<<3,0},
co{1<<6,1<<1,0,0},
co{1<<1,1<<3,0,0},
co{1<<0,1<<2,0,0}};
bool Tra(int x){return std::get<0>(vch[x]).substr(0,3)=="Tra";}
bool ez(int x){return Tra(x)||std::get<1>(vch[x])==4;}
int main()
{
    const int n=vch.size();
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
            for(int k=j+1;k<n;k++)
                for(int l=k+1;l<n;l++)
                {
                    using std::get;
                    int _=Tra(i)+Tra(j)+Tra(k)+Tra(l);
                    if(_<=1&&ez(i)&&ez(j)&&ez(k)&&ez(l))
                    {
                        co x{get<2>(vch[i])|get<2>(vch[j])|get<2>(vch[k])|get<2>(vch[l]),
                        get<3>(vch[i])|get<3>(vch[j])|get<3>(vch[k])|get<3>(vch[l]),
                        get<4>(vch[i])|get<4>(vch[j])|get<4>(vch[k])|get<4>(vch[l]),
                        get<5>(vch[i])|get<5>(vch[j])|get<5>(vch[k])|get<5>(vch[l])};
                        bool f=1;
                        for(const co&y:vco)
                            if(!(get<0>(x)&get<0>(y))&&!(get<1>(x)&get<1>(y))&&!(get<2>(x)&get<2>(y))&&!(get<3>(x)&get<3>(y)))
                            {
                                f=0;
                                break;
                            }
                        if(f)
                            std::cout<<get<0>(vch[i])<<' '<<get<0>(vch[j])<<' '<<get<0>(vch[k])<<' '<<get<0>(vch[l])<<'\n';
                    }
                }
    return 0;
}

运行后可以得到共有 992 组解。如果允许全角色,则是 10388 组解。顺便说一句,容易发现按照字典序排序后真空的解是 992 组中第 481 组和 10388 组中的第 3965 组。

我自己有 1975 组解,猜猜我有哪些角色呢?

补充一下,实际上三个角色就够了,但是这时候即使允许全角色解也少得可怜,如下:

Charlotte Razor Yaoyao
Dori Sigewinne Xiao
Freminet Lisa Yaoyao
Furina Sayu Yaoyao
Neuvillette Razor Yaoyao

Emilie 可以抽了所以全角色得再加一行:

ch{"Emilie"     ,5,1<<4,1<<2,1<<4,1<<0},

于是全角色的解成了 15424(草系长枪太恐怖了)。

而且允许三个角色会骤然增加到 27 种解。

Baizhu Emilie Razor
Barbara Beidou Emilie
Beidou Emilie Klee
Beidou Emilie Lisa
Beidou Emilie Mona
Beidou Emilie Shikanoin_Heizou
Beidou Emilie Sucrose
Beidou Emilie Wanderer
Beidou Emilie Xianyun
Charlotte Emilie Razor
Charlotte Razor Yaoyao
Chongyun Emilie Lisa
Dori Emilie Xianyun
Dori Sigewinne Xiao
Emilie Eula Lisa
Emilie Eula Yae_Miko
Emilie Freminet Lisa
Emilie Gaming Lisa
Emilie Lisa Xinyan
Emilie Ningguang Razor
Emilie Razor Wriothesley
Emilie Razor Xianyun
Emilie Razor Yanfei
Emilie Sayu Xingqiu
Freminet Lisa Yaoyao
Furina Sayu Yaoyao
Neuvillette Razor Yaoyao