错因分析
◊思考不细致,对题目有为畏难情绪,例如今天第一题,我一看到题目就不想去思考,草率的打了一个特别不靠谱的方法就停止了,后面知道自己错了都没有时间了,因为我已经被别的题目搞的头晕脑涨了
◊做题不严谨,今天的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]; }