模拟赛 10-14考试再次翻车记

10-14 考试

7点开始考试,第一题傻逼题啊,直接取模过程中加上商就可以了,切掉切掉。

1、光剑
(sword.pas/c/cpp)
【题目描述】
小林和亮亮各有一把光剑,长度分别为 a 和 b,他们拿光剑进行比试。每一
回合,长光剑会砍向短光剑,砍完后,短光剑完好无损,而长光剑则被截成两段,
被截去的长度恰好等于短光剑的长度。若两把光剑长度相等,则比试结束。请问
小林和亮亮将比试多少回合?
【输入格式】
第一行一个整数 T,表示数据组数。
接下来 T 行每行两个正整数 a,b,表示初始状态光剑的长度。
【输出格式】
每组数据输出一个整数,表示能进行几个回合的比试。
【样例输入】
3
1 8
3 7
6 6
【样例输出】
7
4
0
【数据规模】
对于 40%的数据,0 < a,b <= 1000, 1 <= T <= 20;
对于 100%的数据,0 < a,b <= 10^18,1 <= T <= 1000。

code:

#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
inline int read(){
    int sum=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();}
    return sum*f;
}
int t,a,b,ans;
long long work(long long x, long long y){
    if(x<y)swap(x, y);
    if(y==1)return x-1;
    if(x==y)return 0;
    if(y==0)return -1;
    else return work(y,x%y)+x/y;
}
signed main(){
    freopen("sword.in","r",stdin);
    freopen("sword.out","w",stdout);
    t=read();
    for (int i=1;i<=t;i++){
        long long x, y;
        x=read();y=read();
        printf("%lld\n",work(x, y));
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

7点25开始看T2,第一眼感觉很恶心啊,先不管打一个\(n^5\)的暴搜再说。

打完暴搜立马就想起来昨天ZAGER出的T2,\(meeting  in  the  middle\) 啊,先搜前三层,再搜后两层,然后lower_bound找相反数就行了,这就完了。

2、化零
(zero.pas/c/cpp)
【题目描述】
小林拥有 2 个集合,亮亮拥有 3 个集合,这五个集合大小相等,且集合中包
含的都是整数。现在他们两个要进行心算比赛。比赛的规则是,将这五个集合放
在一起,谁能先从每个集合中各选一个数,使得选出的五个数之和为 0,谁就获
得胜利。由于这五个集合都不小,而小林和亮亮事先并不知道是否能存在这样的
五个数,因此他们决定先把五个集合都交给你,由你来编程判断是否存在符合条
件的五个数。
【输入格式】
第一行一个整数 N,表示集合的大小。
接下来五行每行 N 个整数,表示这五个集合内的元素。
【输出格式】
如果能找到符合条件的五个数,则输出“YES”,否则输出“NO”。
【样例输入】
3
1 -2 9
-1 2 1
-3 5 1
-1 7 6
-4 -1 -7
【样例输出】
YES
【数据规模】
对于 30%的数据,1 <= N <= 20;
对于 50%的数据,1 <= N <= 100;
对于 100%的数据,1 <= N <= 200,-10^8 <= a[i] <= 10^8,a[i]为集合中元素

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
const int wx=8000017;
inline int read(){
    int sum=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();}
    return sum*f;
}
int a[wx],b[wx];
int s[70][4170];
int cnt,tot,num,n;
void dfs(int step,int num){
    if(step>=4){
        a[++cnt]=num;
        return;
    }
    for(int i=1;i<=n;i++){
        dfs(step+1,num+s[step][i]);
    }
}
void DFS(int step,int num){
    if(step>=3){
        b[++tot]=num;
        return;
    }
    for(int i=1;i<=n;i++){
        DFS(step+1,num+s[step+3][i]);
    }
}
signed main(){
    freopen("zero.in","r",stdin);
    freopen("zero.out","w",stdout);
    n=read();
    for(int i=1;i<=5;i++){
        for(int j=1;j<=n;j++){
            s[i][j]=read();
        }
    }
    dfs(1,0);
    DFS(1,0);
    sort(a+1,a+1+cnt);
    for(int i=1;i<=tot;i++){
        int tmp=lower_bound(a+1,a+1+cnt,-b[i])-a;
        if(a[tmp]==-b[i]&&tmp<=cnt&&tmp>=1){
            printf("YES\n");
            return 0;
        }
    }
    printf("NO\n");
    fclose(stdin);
    fclose(stdout);
    return 0;
}

八点开始肝T3,看起来好难啊,鬼特么2048,不会。

但肯定是DP啊,瞎鸡儿设状态吧,但是感觉复杂度不太对劲啊,,二进制拆位走起来,溜了溜了。

3、2048
(2048.pas/c/cpp)
【题目描述】
小林和亮亮最近正在重温 2048 这款游戏。由于他们的游戏水平高超,觉得
没有什么挑战性,于是决定自己设计一款类似的游戏。
他们设计的游戏中,数字排成了一个线性的序列,每次玩家可以将序列中任
意两个相同的数 a 合并,成为一个新的数 2*a,当合并出 2048 时游戏即获得胜
利。设计完后,他们发现这个游戏比原来的版本更加简单了,于是他们就开始计
算,对于一个给定的长度为 n 的序列,它共有多少子序列可以合并出 2048。请
给出这个数模 998244353 后的值。
【输入格式】
第一行有一个整数 n。
第二行 n 个整数 Ai,表示数列中的数。
【输出格式】
一个整数,即为所求的答案。
【样例输入】
2
2048 2048
【样例输出】
3
【数据规模】
对于 40%的数据,n <= 20;
对于 70%的数据,n <= 500;
对于 100%的数据,1 <= n <= 100000,1 <= Ai <= 2048。

code:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define int long long
using namespace std;
const int wx=100017;
const int mod=998244353;
int n,cnt;
int a[20],flag[wx],WX[20];
int a1[wx],a2[wx],a3[wx];
int f[20][wx];
inline int read(){
    int sum=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();}
    return sum*f;
}
int ksm(int a,int b){
    int re=1;
    while(b){
        if(b&1)re=re*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return re;
}
void pre(){
    memset(flag,-1,sizeof(flag));
    for(int i=0;i<=11;i++){
        flag[1<<i]=i;
        WX[i]=2048/(1<<i);
    }
    a1[0]=1;
    for(int i=1;i<wx;i++)
        a1[i]=a1[i-1]*2%mod;
    a3[0]=a2[0]=1;
    for(int i=1;i<wx;i++){
        a3[i]=a3[i-1]*i%mod;
        a2[i]=ksm(a3[i],mod-2);
    }
}
void jia(int &a,int b){
    a+=b;
    if(a>=mod)a-=mod;
}
signed main()
{
    freopen("2048.in","r",stdin);
    freopen("2048.out","w",stdout);
    n=read();pre();
    for(int i=0;i<n;i++){
        int x;x=read();
        if(flag[x]==-1)cnt++;
        else a[flag[x]]++;
    }
    memset(f,0,sizeof f);
    int num=min(a[0],WX[0]);
    int sum=0,val;
    for(int i=0;i<=num;i++){
        val=a3[a[0]]*a2[i]%mod*a2[a[0]-i]%mod;
        f[0][i]=val;
        jia(sum,val);
    }
    if(WX[0]<a[0])
        f[0][WX[0]]=(f[0][WX[0]]+a1[a[0]]-sum+mod)%mod;
    for(int i=1;i<=11;i++){
        num=min(a[i],WX[i]);
        sum=0;
        for(int j=0;j<=num;j++){
            val=a3[a[i]]*a2[j]%mod*a2[a[i]-j]%mod;
            jia(sum,val);
            for(int k=0;k<=WX[i-1];k++)
                if(f[i-1][k]){
                    int temp=min(j+k/2,WX[i]);
                    jia(f[i][temp],val*f[i-1][k]%mod);
                }
        }
        if(a[i]>WX[i]){
            val=(a1[a[i]]-sum+mod)%mod;
            for(int j=0;j<=WX[i-1];j++)
                if(f[i-1][j])
                    jia(f[i][WX[i]],f[i-1][j]*val%mod);
        }
    }
    printf("%lld\n",f[11][1]*a1[cnt]%mod);
    return 0;
}

后记总结:
这场考试本来是AK的,但是因为种种原因才考了160分,难受。。。

第二题在debug的时候把\(8*10^6\)改成了\(1*10^6\),后四个点全都RE了,也是够傻逼了。。

第三题没写cstdio,直接暴库了,这可爱的dev,真好。

首先自己的题做的不错,但是还是细节上除了致命的问题,所以要像他们说的一样,把心沉下来,继续加油吧。

原文地址:https://www.cnblogs.com/wangxiaodai/p/9785666.html

时间: 2024-07-31 15:51:31

模拟赛 10-14考试再次翻车记的相关文章

[模拟赛10.12] 老大 (二分/树的直径/树形dp)

[模拟赛10.12] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n ? 1 条边的无向连通图),由于新建的办公室太大以至于要将奖杯要分放在两个不同的地方以便同学们丢硬币进去开光,OB 想请你帮帮他看看奖杯放在哪两个办公室使得在任意一个在劳模办公室做题的小朋友能最快地找到奖杯来开光. 一句话题意:给出一个 n 个点的树,在两个合适且不同的点放上奖杯,使得每个点到最近的奖杯距离最大值最小. 输入

模拟赛 10-25上午考试记

10-25上午考试记 NP(np) Time Limit:1000ms Memory Limit:64MB 题目描述 LYK 喜欢研究一些比较困难的问题,比如 np 问题. 这次它又遇到一个棘手的 np 问题.问题是这个样子的:有两个数 n 和 p,求 n 的阶乘 对 p 取模后的结果. LYK 觉得所有 np 问题都是没有多项式复杂度的算法的,所以它打算求助即将要参加 noip 的你,帮帮 LYK 吧! 打表发现如果n>=p,答案就是0. 所以把n的范围缩小到1e7.但是有p=1e9+7. 分

潍坊一中模拟赛10.25 长途旅行

[题目描述] JY是一个爱旅游的探险家,也是一名强迫症患者.现在JY想要在C国进行一次长途旅行,C国拥有n个城市(编号为0,1,2...,n - 1),城市之间有m条道路,可能某个城市到自己有一条道路,也有可能两个城市之间有多条道路,通过每条道路都要花费一些时间.JY从0号城市开始出发,目的地为n – 1号城市.由于JY想要好好参观一下C国,所以JY想要旅行恰好T小时.为了让自己的旅行更有意思,JY决定不在任何一个时刻停留(走一条到城市自己的路并不算停留).JY想知道是否能够花恰好T小时到达n

NOIP模拟赛10.07

%hzwer提供试题 http://hzwer.com/7602.html 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out elephant.in move.in 时间限制 1s 1s 1s 空间限制 64MB 128MB 128MB “与” (and.pas/.c/.cpp) 时间限制:1s:空间限制64MB 题目描述: 给你一个长度为n的序列A,请你求出一对Ai,Aj(1<=i<j<=n)使Ai“与”

日常:6.14——考试苟过记

我苟了考试,我不是人 第一题苟过去了…… 第三题打爆了. 打了个lca想骗点分,期望得分40,但是我建的树里面有一半的节点死活找不着父节点…… 调了俩小时,另外一个小时用来苟第一题. 我好虚啊 谁能告诉我为什么在bfs里面输出的都是完美的爸爸 到外面就成零了! 我是不是杀了人家的父亲 警察叔叔……我是好人……我没杀人……我杀的是节点…… 手模一个:(/起了歹念 还是要继续努力啊! 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11025099.ht

模拟赛 妖怪等级考试 题解

妖怪等级考试: 给定一个无向连通图,求是否存在两个点之间存在三条路径, 并要求输出路径. 首先,如果两个节点之间存在多条不相交路径,就一定存在一个环. 所以,这题和找环相关. 只有两个环之间存在相交的边,才说明有解. 如图: 现在关键就是如何找到环. 由于无向图dfs后,只有树边和返祖边,且只有返祖边才会形成环,所以只要对返祖边处理就可以了. 每次将第个\(i\)环上所有边染成\(i\)色,当有一个边被染成两种颜色时,就找到了解. 因为每条边最多被染一次就会出现解,所以染色可以暴力进行. 如图:

潍坊一中模拟赛10.2 妖精大作战

[Description] 潍坊一中有绿化很好,产生了很多树精草精动物精等妖精,妖王经常安排妖精们打架来消磨时间,其中有N 个妖精开始了一场约架 ,现在每一只妖精都已经把自己所有的弹幕瞄准了一只妖精(有可能是自己). 这些妖精的能力值都非常高,所以一旦将弹幕发射出去,瞄准的妖精必死无疑. 为了使问题变得更有趣一些,妖王打算让这些妖精按照某个顺序来发射弹幕.一旦某个妖精已经被打死了,那么他将退出战斗. 可以预见到,按照不同的顺序,最后死亡的妖精数量是不一样的. 妖王想知道,死亡的妖精数量的最大值和

9 16 模拟赛

昨天 又考模拟赛 考场上心态再次爆炸 导致一道题爆零. 总结 :慌了..当T1看了30min还不知道怎么做的时候我就已经慌了..觉得要GG了.(以后还是不能慌 把送的分数都拿到手才是正道... 考试策略还行 大概是先写自己会写的暴力 再写陌生的题目.放题么?还是放吧 反正没人看..(当然.. 当然 考试是最暴露出自己的短板的 可能这次不爆下次就爆了. 原文地址:https://www.cnblogs.com/chdy/p/11526312.html

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=