Problem C. gNumbers Google APAC 2016 University Test Round B

本文探讨了一种基于递归策略解决博弈问题的方法,并通过筛选质数因子来判断玩家是否能赢得游戏。针对数字N,文章详细介绍了如何利用递归算法来确定获胜策略。

看到博弈就懵逼的我><这一题原来是递归做。

如果当前player接手数字N,该方一定赢的条件是存在一种prime factor的选择方法,使得另一方一定会输。

如果当前player接手数字N,该方一定输的条件是没有一种prime factor的选择方法,使得另一方一定会输。i.e., 如果存在一种策略使得另一方一定会输,那么当前player一定不会输。

这样就可以枚举所有的prime factor选择方法,递归处理。

看到N=1e15吓cry了。事实上,前14个质数(2,3,5,7,...so on)相乘就已经超过1e15了,所以N对应的质因子个数不会很多,所以递归层数不会很多。

以及学到了一种神奇的筛质因子的方法。╮(╯▽╰)╭

开始大数据dead了是因为枚举质因子的循环里把long long写成了int。可能因为int溢出变成负数了,循环就出不来了。o(╯□╰)o

#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<string>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<set>

using namespace std;

//2016 Round B Problem C. gNumbers
int T;
const int maxn=2010;
long long N;
bool ans;
vector<long long>factors;
bool isprime(long long num)
{
    for(long long i=2;i*i<=num;i++)
    {
        if(i==num) continue;
        if(num%i==0)
        {
            return false;
        }
    }
    return true;
}
bool isgnumber(long long num)
{
//    if(num==1)
//    {
//        return true;must return true if num==1
//    }
    long long sum=0;
    while(num>0)
    {
        sum+=num%10;
        num/=10;
    }
    return isprime(sum);
}
bool win(long long num);
bool lose(long long num)//whether the player handling num must lose, true is mustlose
{
    //cout<<"lose "<<num<<endl;
    if(isgnumber(num)==true)
    {
        return true;
    }
    long long tmpnum=num;
    for(int i=0;i<factors.size();i++)
    {
        if(num%factors[i]==0&&isprime(factors[i])==true)//
        {
            long long tmpnum=num;
            while(tmpnum%factors[i]==0)
            {
                tmpnum/=factors[i];
            }
            if(win(tmpnum)==false)
            {
                return false;
            }
        }
    }
    return true;
}
bool win(long long num)//whether the player handling num will win, true is must win
{
    //cout<<"win "<<num<<endl;
    if(isgnumber(num)==true)
    {
        return false;
    }

    for(int i=0;i<factors.size();i++)
    {
        if(num%factors[i]==0&&isprime(factors[i])==true)//tmpnum%factors[i] leads to WA
        {
            long long tmpnum=num;
            while(tmpnum%factors[i]==0)
            {
                tmpnum/=factors[i];
            }
            if(lose(tmpnum)==true)
            {
                return true;
            }
        }
    }
    return false;
}
int main()
{
//    long long prod=1;
//    int cnt=0;
//    for(long long i=2;i<45;i++)
//    {
//        if(isprime(i))
//        {
//            cnt++;
//            prod*=i;
//        }
//    }
//    cout<<cnt<<" "<<prod<<endl;
//    return 0;
    freopen("C-small-practice.in","r",stdin);
//    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    scanf("%d",&T);
    for(int ca=1;ca<=T;ca++)
    {
        factors.clear();
        scanf("%lld",&N);
        long long tmp=N;
        for(long long i=2;i*i<=tmp;i++)//use int i leads to dead loop in large dataset
        {
            if(tmp%i==0)
            {
                factors.push_back(i);
                while(tmp%i==0)
                {
                    tmp/=i;
                }
                //cout<<i<<" "<<tmp<<endl;
            }
        }
        if(tmp>1)
        {
            factors.push_back(tmp);
        }
        ans=win(N);
        printf("Case #%d: %s\n",ca,(ans==true?"Laurence":"Seymour"));

    }
    return 0;
}


yolo算法港口码头船舶目标检测数据集 目标类别:['ship'] 中文类别:['船舶'] 训练集:16046 张 验证集:1971 张 测试集:983 张 总计:19000 张 该数据集提供了data.yaml文件,内容如下: train: ../train/images val: ../valid/images test: ../test/images nc: 1 names: ['ship'] 该数据集聚焦于港口码头及近海水域的船舶检测任务,涵盖多种类型船舶在不同天气、光照和水文条件下的真实场景。图像样本覆盖了货轮、客轮、拖船、油轮及工程船等典型船只,充分体现了海上交通与港口作业的复杂性与多样性。通过高精度标注,该数据集为海上智能监控、船舶识别与航行安全预警系统提供了高质量的数据支撑,具有重要的实际应用价值。 该数据集在训练集、验证集和测试集之间实现了科学合理的分布,训练集包含16046张图像,验证集1971张,测试集983张,总计19000张。这种分布结构确保了模型在训练过程中具备充足的样本学习能力,同时验证集与测试集规模适中,能够有效评估模型的泛化性能与稳定性,符合深度学习项目对数据划分的标准要求。 该数据集的标注工作严谨规范,所有船舶均采用精确边界框进行标注,覆盖了不同尺寸、姿态和视角下的目标实例。标注框紧密贴合船舶轮廓,未出现明显偏移或遗漏,且在复杂背景(如水面反光、雾天、桥梁遮挡)下仍保持高一致性。标注信息完整可靠,为后续模型训练提供了坚实基础。 该数据集可广泛应用于港口自动化管理、海上交通监控、船舶动态跟踪、航道安全预警以及海洋执法等领域。其丰富的场景覆盖和多样化的船舶类型使其特别适用于智慧港口建设、海上搜救系统开发及航运物流智能化升级,能够有效提升相关系统的识别准确率与响应效率,推动海洋经济数字化转型。
内容概要:本文围绕弱电网环境下虚拟同步发电机(VSG)的正负序阻抗建模与稳定性分析展开,基于序阻抗建模方法,利用Simulink搭建VSG的正负序阻抗模型,深入研究其在弱电网条件下的阻抗特性及并网系统的交互稳定性。重点探讨了正负序阻抗的解耦特性及其对系统宽频振荡的影响机制,并采用扫频法进行小信号建模与模型有效性验证,为构网型变流器在复杂电网环境中的稳定性分析提供了理论依据与仿真技术支持。该研究对于新能源高比例接入背景下的并网系统稳定运行具有重要意义。; 适合人群:电力电子、新能源并网、电力系统自动化、电气工程等相关专业的研究生、高校科研人员及从事新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的虚拟同步发电机正负序阻抗建模方法;②理解弱电网条件下VSG并网系统的稳定性影响因素与振荡机理;③学习并应用扫频法进行小信号稳定性分析与阻抗特性辨识;④为宽频振荡分析、构网型控制策略设计、新能源并网稳定性评估等科研与工程问题提供可复现的技术路径与仿真基础。; 阅读建议:建议读者结合Matlab/Simulink环境动手复现文中模型,重点关注正负序激励信号的注入方式、阻抗扫描流程及Bode图/Nyquist图的稳定性判据解读,同时可延伸阅读相关博士论文与高水平期刊文献,深化对序阻抗建模理论与实际工程应用的理解。
内容概要:本文围绕虚拟同步发电机(VSG)接入弱电网的序阻抗建模与稳定性分析展开,通过Simulink仿真实现VSG系统的正负序阻抗特性建模,并采用扫频法验证模型的准确性。深入探讨了在弱电网背景下,VSG并网系统因电网与变流器之间阻抗交互引发的稳定性问题,系统阐述了正负序阻抗解耦建模的理论基础与实现方法,及其在小信号稳定性评估中的关键作用。资源包配套提供了完整的MATLAB代码与Simulink仿真模型,涵盖了阻抗建模、小信号分析、扫频辨识等核心技术环节,有助于科研人员深入理解构网型变流器的动态响应机制与稳定机理,为相关高水平学术研究与工程实践提供有力支撑。; 适合人群:具备电力电子、电力系统分析等相关基础知识,从事新能源并网技术、微电网控制、虚拟同步机(VSG)或构网型变流器研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握虚拟同步发电机在弱电网条件下的序阻抗建模理论与具体实现方法;②学习并实践基于Simulink的小信号分析与扫频辨识技术,掌握奈奎斯特判据等稳定性分析手段;③能够复现、验证VSG系统的序阻抗特性曲线,分析其稳定边界,服务于学术论文撰写、科研项目攻关及创新性控制策略的设计与验证。; 阅读建议:此资源以仿真复现为核心目标,建议读者务必结合所提供的完整代码与仿真模型进行动手实践,重点关注扫频激励信号的施加方式、频率响应数据的提取流程以及阻抗曲线的物理内涵解读,同时应查阅相关经典文献,以深化对构网型控制原理与电力系统稳定性理论的系统性理解。
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在信息技术领域中,网络通信扮演着至关重要的角色,而Socket编程则是达成此目的的关键技术。本文将详细研究利用C#语言进行Socket编程的方法,尤其关注在处理异步通信和应对TCP粘包问题的第三阶段。C#拥有完备的类库资源,为网络编程提供了便利,使得开发者能够便捷地开发基于TCP/IP的客户端和服务器程序。 让我们首先明确Socket的概念。Socket是一种进程间通信(IPC)的工具,它使网络上的应用程序能够进行双向交流。在C#语言中,System.Net.Sockets命名空间中包含了Socket类,该类是执行TCP/IP通信的基础。 异步通信在现代网络应用中具有核心地位,因为它能显著提升程序的响应能力和工作效率。C#的Socket类包含了BeginConnect、BeginSend、BeginReceive等异步操作方法,这些方法使得网络操作可以在不干扰主线程的情况下进行。异步通信借助事件驱动机制运作,当数据准备就绪时,系统会启动相应的事件,随后回调函数会被执行以处理数据。 在TCP协议的框架下,由于其流式传输的特点,多个小的数据单元可能会被组合成一个大单元发送(粘包现象),或者一个大单元可能会被分割成多个小单元发送(拆包现象)。这种现象在数据解析过程中可能引发困难。处理TCP粘包问题主要有两种途径:设定合适的消息界限或者采用固定长度的消息格式。 1. 设定消息界限:在每个数据单元的末尾附加特定的分隔符,比如空字符或特殊字符串,这样在接收端可以通过分隔符来区分每个独立的数据单元。 2. 固定长度消息:每个数据单元都设定固定的长度,接收端依据预设的长度来拆分数据。 在C#...
内容概要:本文是一份关于体检报告AI深度分析的标准化提示词文档,旨在指导AI系统对用户历年体检报告(PDF)进行跨年度趋势分析、风险预警与疾病演进推演。文档构建了五层分析体系:安全声明与隐私保护、输入规范、分析框架、输出结构及执行铁律,强调AI作为“数据翻译官”的角色定位,严禁越界出具诊断或药物处方。核心方法包括时间序列趋势识别(如持续临界、方向性恶化)、多指标关联模块分析(如动脉粥样硬化、代谢综合征等六大模块)、穿透“正常”标签的假阴性识别、影像描述词汇变化追踪,并制定了严格的风险分级(高/中/低)与输出规范,确保分析结果科学、可操作且边界清晰。; 适合人群:关注长期健康管理、希望从历年体检数据中发现潜在健康风险的个体,尤其适用于有慢性病家族史、多重代谢异常或既往异常指标但被判定为“基本正常”的人群。; 使用场景及目标:①实现体检报告的智能化、系统化解读,弥补人工阅报遗漏趋势性变化的短板;②识别早期疾病信号与多系统协同异常,推动用户及时就医评估;③生成面向医生的专业提问清单与沟通话术,提升医患沟通效率;④帮助用户建立基于数据的主动健康管理模式。; 阅读建议:使用者需严格按照文档规定的流程操作,上传前完善基线信息,分批提交报告以保证分析质量;重点关注AI输出中的“高风险预警”“假阴性”与“多系统受累”提示,将其作为启动专科诊疗的重要依据,而非最终诊断结论。
源码链接: https://pan.quark.cn/s/9558bbeae516 bcdboot是一种在Windows操作系统中具有关键作用的实用程序,其主要功能是修复系统启动配置数据(BCD,即Boot Configuration Data)。在Windows Vista及其后续版本中,BCD负责存储所有与启动相关的内容,涵盖操作系统的位置、启动菜单选项等信息。当系统启动遭遇故障,例如主引导记录(MBR)出现损坏或引导扇区受到病毒侵袭时,bcdboot工具能够被用于恢复或重新构建BCD,进而协助系统恢复正常启动过程。 **一、bcdboot工具的基础运用** bcdboot命令行工具一般需要在命令提示符界面下执行,并且要求具备管理员权限。其基本的使用格式如下: ```cmd bcdboot <source> [:\windows] /s <target> [/v] [/l {locale}] [/f {BIOS|UEFI}] ``` - `<source>`:用于指定需要从中复制启动数据的系统分区,通常为C盘。 - `:\windows`:代表目标系统目录,通常无需改动。 - `/s <target>`:用于设定更新BCD数据存放的位置,一般也是系统分区。 - `/v`:选项用于展示运行过程中的详细信息。 - `/l {locale}`:用来设定BCD中的区域配置。 - `/f {BIOS|UEFI}`:用于标明系统的启动类型,其中BIOS适用于传统BIOS架构,UEFI则适用于新型UEFI架构。 **二、bcdboot的实际应用情形** 1. **修复MBR或GPT引导机制**:当主引导记录(MBR)或GUID分区表(GPT)受损导致无法启动时,可以借...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值