ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

THUPC2021题解

2021-06-21 20:34:17  阅读:196  来源: 互联网

标签:puts int 题解 Award xx 答案 Turing THUPC2021


持续更新中……

从哪里跌倒,从哪里爬起!

B

建立主席树,对每次询问算出答案,然后二分位置判断

代码:略

H

容易发现答案大时一定是k+1或者k+2,n若被k+1整除,则答案是k+1,反之是k+2

其次发现答案至少是k+1,然后可以将剩余的分配,然后每次往每一堆里塞一个就行,设n=a(k+1)+b,答案是k+1+[b/a]

但要注意的是如果n小于k+1则每个颜色不同,要特判一下

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int n,k,x;
char nn[N],xx[N];
void check(int a,int b)
{
    if(a==b)puts("Correct, but it doesn't necessarily mean that you can win the Turing Award.");
    if(a<b)puts("Wrong, don't cheat me, you are too far away from the Turing Award.\n1");
    if(a>b)puts("Wrong, don't cheat me, you are too far away from the Turing Award.\n0");
}
int main()
{
    scanf("%s%d%s",nn+1,&k,xx+1);
    if(strlen(xx+1)>=4)
    {puts("Wrong, don't cheat me, you are too far away from the Turing Award.\n1");return 0;}
    for(int i=1;i<=strlen(xx+1);++i)x=x*10+xx[i]-'0';
    if(strlen(nn+1)>5)
    {
        for(int i=1;i<=strlen(nn+1);++i)n=(n*10+nn[i]-'0')%(k+1);
        if(!n)check(k+1,x);else check(k+2,x);
    }
    else{
        for(int i=1;i<=strlen(nn+1);++i)n=n*10+nn[i]-'0';
        if(n<k+1)check(n,x);
        else if(n%(k+1)==0)check(k+1,x);
        else check(k+2+(n%(k+1)-1)/(n/(k+1)),x);
    }
}

I

数位DP,注意Nim获胜条件,2^m枚举子集,f[i][S][j]表示从高到低dp到第i位,目前被卡上限的集合是S,低位向这位进j次,注意j的范围是[0,m-1]

代码:略

标签:puts,int,题解,Award,xx,答案,Turing,THUPC2021
来源: https://www.cnblogs.com/hfctf0210/p/14915554.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有