• 1.25日考试


    错因分析

    ◊思考不细致,对题目有为畏难情绪,例如今天第一题,我一看到题目就不想去思考,草率的打了一个特别不靠谱的方法就停止了,后面知道自己错了都没有时间了,因为我已经被别的题目搞的头晕脑涨了

    ◊做题不严谨,今天的T3和T4,我都有很多小细节上的错误,忘了判重,for循环的漏洞,都让我耗费了很久的时间,所以下次敲题目时要注意

    那些细枝末节,想清楚以后在答题,比乱打一气要少花很多时间

    ◊学会给题目分类,看到一个题目,我们要试图去分析它所考察的点是什么,这样的话你可以更快的想到处理解决的方法,例如

    今天T3,考的图论,那么脑袋里就要浮现出图论的知识怎么储存,怎么处理....

    还有T4,知道考察的是DP就要列出状态和转移方程....

    学习方法

    ◊好开心,我又从GQL大佬那里学了点新方法

    1.思考题目考察什么便是一个好方法

    2.在做题之前,先对着目录,将你所需要的cpp都打出来,在我眼中这种方法有一下几点好处

    ♠不会出现(减少)文件名的错误

    ♣是自己心里有底,即使要交卷了也不心慌,因为我已经都打出来了

    ♥对题目有一个宏观的了解

    ◊不要放弃爆搜,这是一个几乎万能的方法,有时比你费劲心思去想正解得到的分数还多(今天就是一个例子)

    (由于还没交流,我就只解决有题解的T4)


    1.pf
    题目描述

    pf 是个斐波那契数迷。他是如此的酷爱这个数列,因此他想知道很多关
    于这个数列的东西,比方说第 N 个斐波那契数是多少啊、前 N 项的和是
    多少啊,如何用若干个斐波那契数的和表示一个自然数啊之类之类的。今天
    他希望知道的是:他想用第 1 个、第 2 个„第 N 个斐波那契数构成一个
    长度为 P 的序列,每个斐波那契数可以使用任意多次,但至少要使用一次,
    并且序列中任意两个相同的斐波那契数之间至少要隔着 M 个数, pf 希望知
    道满足条件的序列组成方法有多少种。记 fib[i] 表示第 i 个斐波那契数,
    fib[0]=fib[1]=1,fib[i]=fib[i-1]+fib[i-2] (i>1)。

    输入

    输入只有三个整数 N,M,P

    输出

    输出一个数字表示序列组成方法,由于结果可能很大,只需输出结果模上
    1000000007 就可以

    样例输入

    2 1 4

    样例输出

    2

    数据规定

    对于 100% 的数据,有 1 ≤ N ≤ P ≤ 1000,0 ≤ M ≤ N

    对于这道题目,我有点无语,这就是那道我想都懒得想就乱打一气的题目


    2.守卫者的挑战

    3.hamilton
    题目描述

    hyc 喜欢研究各种各样奇奇怪怪的东西~
    一天,hyc 研究了一个关于哈密顿路的问题。
    如果一条路径满足:不经过重复顶点、不经过重复边、首尾相连, 那么称
    这条路径为简单环。
    给出一张无向图,求这个无向图当中长度不小于 3 (即经过不少于 3 个点)
    的简单环的个数。

    输入

    第一行两个整数 N、M,表示图有 N 个点、M 条边。
    接下来 M 行,每行两个整数 a、b,表示顶点 a 和顶点 b 之间有一条无
    向边。
    数据保证没有自环和重边的出现。

    输出

    一行一个整数,表示无向图当中长度不小于 3 的简单环的个数。

    样例输入

    4 6

    1 2

    1 3

    1 4

    2 3

    2 4

    3 4

    样例输出

    7

    数据规定

    对于 50% 的数据 , 保证答案不大于 10^6.
    对于 100% 的数据 ,N<=20, 保证答案可以用 64 位整形存储 .


    4.修理草坪  
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long;
    ll n,m,a[100010],sum[100010],f[100010];
    ll d[100010];
    int q[100010],head=0,tail=1;
    int scan()
    {
        int as=0;
        char c=getchar();
        while(c<'0'||c>'9') c=getchar();
        while(c>='0'&&c<='9')
        {
            as=(as<<3)+(as<<1)+c-'0';
            c=getchar();
        }
        return as;
    }
    ll que(int i)
    {
        d[i]=f[i-1]-sum[i];
        while(head<=tail&&[q[tail]]<d[i]) tail--;
        q[++tail]=i;
        while(head<=tail&&q[head]<i-m) head++;`
        return d[q[head]];
    }
    int main()
    {
        scanf("%lld%lld",&n,&m);
        for(int i=1;i<=n;i++)
        {
            a[i]=scan();//a[i]数组记录
            sum[i]=sum[i-1]+a[i];//记录前缀和
        }
        for(int i=1;i<=n;i++)
        {
            f[i]=que(i)+sum[i];
        }
     
  • 相关阅读:
    Java的字符串及格式化输入输出
    Java的数据类型与类型转换
    java基本程序
    svn基础入门
    github基础入门笔记
    git基础入门笔记
    linux基础入门笔记
    二、FreeMarker 模版开发指南 第二章 数值和类型
    【CodeForces】[599B]Spongebob and Joke
    【CodeForces】[612B]HDD is Outdated Technology
  • 原文地址:https://www.cnblogs.com/KSTT/p/10320686.html
Copyright © 2020-2023  润新知