(未完成)[HDUOJ]“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛

solved 5

A(签到)

题意:两个人随机得到0或1其中之一数字,每个人都可以猜对方的数字是什么,有一个人猜对就算成功,问最优策略下00,01,10,11四种情况两人的成功概率分别是多少。

题意不明的签到题,题面说两人不能沟通,以为就是两个人随便猜,成功率都是1-0.5*0.5=0.75。结果是两个人可以提前商量好策略,那显然可以其中一个人猜和自己相同的数,另一个人猜和自己不同的数,那么所有的成功率都是100%。

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define LL long long
#define pii pair<int,int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back

const int N= 1e7+7;
const int inf= 3e3+7;

int main(){
    printf("1.00\n1.00\n1.00\n1.00\n");

    system("pause");
}

0:48(2A)

B(递推)

题意:求斐波那契数列每一项的平方的连续一段和。

题意不明的签到题,前缀和,注意最后相减之后要加mod再模mod防止出现负数。

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define LL long long
#define pii pair<int,int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back

const int N= 1e6+7;
const int inf= 3e3+7;
const int mod=192600817;

int get(int a,int b){
    return a*4+b+1;
}

LL f[N],F[N];

int main(){
    f[1]=f[2]=1;
    F[1]=1;
    F[2]=2;
    for(int i=3;i<=1e5;i++){
        f[i]=(f[i-1]+f[i-2])%mod;
        F[i]=f[i]*f[i]%mod;
        F[i]+=F[i-1];
        F[i]%=mod;
    }
    int q;
    while(cin>>q){
    while(q--){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        //if(get(a,b)==get(c,d))cout<<0<<endl;
        if(get(c,d)<get(a,b))cout<<(F[get(a,b)]-F[get(c,d)-1]+mod)%mod<<endl;
        else cout<<(F[get(c,d)]-F[get(a,b)-1]+mod)%mod<<endl;
    }
    }
    system("pause");
}

1:37(3A)

C(模拟)

题意:把一个数字变换为他的各数位的平方和,经过若干次变换后这个数可以变成1,则称他为鸽子数,求第K个鸽子数。

记忆化搜索即可。

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define LL long long
#define pii pair<int,int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back

const int N= 1e7+7;
const int inf= 3e3+7;

int cnt;

int ans[N],vis[N],mem[N],in[N];

int solve(int x){
    if(mem[x]!=-1)return mem[x];
    if(x==1)return 1;
    if(in[x])return 0;
    in[x]=1;
    int res=x,now=0;
    while(res){
        now+=(res%10)*(res%10);
        res/=10;
    }
    mem[x]=solve(now);
    in[x]=0;
    return mem[x];
}

int main(){
    memset(mem,-1,sizeof(mem));
    for(int i=1;i<=2e6;i++)if(mem[i]==-1)mem[i]=solve(i);
    rep(i,2e6)if(mem[i])ans[++cnt]=i;
    int q;
    cin>>q;
    while(q--){
        int k;
        cin>>k;
        cout<<ans[k]<<endl;
    }

    system("pause");
}

0:33(1A)

D

E(线性代数)

题意:给出三个点的坐标,以及线性变换后三个点的新坐标(保证三点不共线),多次询问(x,y)经过线性变换后的坐标

F

G(数学)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define LL long long
#define pii pair<int,int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back

const int N= 1e7+7;
const int inf= 3e3+7;
const int mod=1000000007;

LL po(LL x){
    if(x==0)return 1;
    LL res=po(x/2);
    if(x&1)return res*res%mod*2%mod;
    return res*res%mod;
}

int main(){
    LL x;
    while(cin>>x){
        cout<<(x-1)%mod * (po(x)%mod) %mod +1<<endl;
    }

    system("pause");
}

1:12(1A)

H

I

J(矩阵快速幂)

题意:f[n]=f[n-1]+2*f[n-2]+n^3,f[1]=1,f[2]=2,求f[n]。

矩阵快速幂裸题

(打了好久...)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define LL long long
#define pii pair<int,int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back

const int N=6;
const int inf= 3e3+7;
const int mod=123456789;

LL tmp[N][N];
void multi(LL a[][N],LL b[][N],int n)
{
    memset(tmp,0,sizeof tmp);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        for(int k=0;k<n;k++)
        tmp[i][j]=(tmp[i][j]+ (b[i][k]%mod*a[k][j]%mod) )%mod;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        a[i][j]=tmp[i][j];
}
LL init[N][N]={
    {2,0,0,0,0,0},
    {1,0,0,0,0,0},
    {27,0,0,0,0,0},
    {9,0,0,0,0,0},
    {3,0,0,0,0,0},
    {1,0,0,0,0,0}
};

LL a[N][N]={
    {1,2,1,0,0,0},
    {1,0,0,0,0,0},
    {0,0,1,3,3,1},
    {0,0,0,1,2,1},
    {0,0,0,0,1,1},
    {0,0,0,0,0,1}
};

LL b[N][N]={
    {1,2,1,0,0,0},
    {1,0,0,0,0,0},
    {0,0,1,3,3,1},
    {0,0,0,1,2,1},
    {0,0,0,0,1,1},
    {0,0,0,0,0,1}
};

LL res[N][N];

void Pow(LL a[][N],LL n)
{
    for(int i=0;i<N;i++)
    for(int j=0;j<N;j++) res[i][j]=init[i][j],a[i][j]=b[i][j];
    while(n)
    {
        if(n&1)
            multi(res,a,N);
        multi(a,a,N);
        n>>=1;
    }
}

int main(){
    int q;
    cin>>q;
    while(q--){
        LL n;
        cin>>n;
        Pow(a,n-2);
        cout<<res[0][0]<<endl;
    }
    system("pause");
}

2:26(2A)

原文地址:https://www.cnblogs.com/xutianshu/p/10545020.html

时间: 2024-10-25 07:16:55

(未完成)[HDUOJ]“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛的相关文章

2016年“计蒜客”杯华中师范大学第十四届程序设计竞赛题解

A. 寻找字符串 对于一个字符串 s,定义一个函数 S(x),表示 s 中有多少个子串 x.现在给定 S(a),S(b),S(ab),S(ba)的值,求满足这 4 个值的字符串 s,如果有多个满足条件的字符串,输出字典序最小的. s 中仅可能含有字符 a 和 b. 任何一个串的 S(ab) 与 S(ba) 的相差都不会超过1.可以分 S(ab)-S(ba) 为 0 -1 1 三种情况讨论.先构造出相应的 ab 相邻的串,再考虑按照字典序最小出要求将剩余的字母插入串中即可. 应该注意,这道问题有很

(未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)

刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也有些事务,但是这些都不是我松懈的理由, 在此写下这篇博客就是为了提醒自己:Why(为什么别人进科协,我要打 ACM ),How,What 这次比赛的反思: 数论的学习实在是太过于薄弱,要加强,对数字的规律不够敏感,要锻炼, 数据结构最常用的树,不会,要学, 这次题目总体不算特别难,题目的灵活度不大,

“青软杯”安徽科技学院第六届程序设计大赛_专业组

Contest - "青软杯"安徽科技学院第六届程序设计大赛_专业组 Start time:  2015-04-18 08:00:00.0  End time:  2015-04-18 12:00:00.0 Current System Time:  2015-04-21 00:07:42.57  Contest Status:   Ended 关于举办"青软杯"安徽科技学院 第六届程序设计大赛通知 ACM 国际大学生程序设计竞赛 (International Co

Welcome to Swift (苹果官方Swift文档初译与注解二十四)---163~170页(第三章完--第四章 流程控制)

Mutability of Collections (可变集合) 字典和数组都是在一个集合里储存多个值.如果你创建数组或字典后赋值给一个变量,那么这个集合就是可变的( mutable).这就意味着你在创建这个集合之后,依然可以改变这个集合的 大小,添加元素到集合里或者删除已有的元素.相反地,如果你创建的数组或者字典赋值给一个常量,那么这个集合就是不能修改的,也就是说字典或者数组是不可变的(immutable) 对于字典,不可变就意味着你不能替换里面已有的键值对,一个不可变的字典在它一创建出来就是

Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)

In-Out Parameters (全局参数) 像前面描述的参数变量,只能在函数体内进行修改,如果你需要函数修改的它的参数值,并且希望这些改变在函数调用结束后仍然有效,可以定义使用全局参数. 定义全局参数使用关键字inout,全局参数的值在函数调用的时候进行传递,在函数体内进行修改,最后函数回传新值来替换之前的值. 全局参数在函数中,只能使用变量来当作参数,不能使用常量或者文本值作为参数.因为常量或者文本值不可以被修改.为了表明参数变量可以被修改,要在变量名的前面直接添加一个& 符号. 注意

湖南大学第十四届ACM程序设计新生杯 Dandan&#39;s lunch

Dandan's lunch Description: As everyone knows, there are now n people participating in the competition. It was finally lunch time after 3 hours of the competition. Everyone brought a triangular bread. When they were going to eat bread, some people fo

南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 E

链接:https://www.nowcoder.com/acm/contest/122/E来源:牛客网 题目描述 愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M.每个游戏都是多人游戏,他们打算周末一起打游戏. 小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一款游戏),并且每人手上都有一台游戏机,这种游戏机可以通过特定的游戏机连接线连接起来. 但是,他们面临着一个问题:目前没有一个朋友的游戏机是互相连接的.所以它们必须用可用的游戏机连接线连接起来.小C决定依次使用第

湖南大学第十四届ACM程序设计新生杯 E.Easy Problem

E.Easy Problem Description: Zghh likes number, but he doesn't like writing problem description. So he will just give you a problem instead of telling a long story for it. Now given a positive integer x and k digits a1,a2,...,ak, can you find a positi

HDU 6467 简单数学题 【递推公式 &amp;&amp; O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 308    Accepted Submission(s): 150 Problem Description 已知 F(n)=∑i=1n(i×∑j=inCij) 求 F(n) m