本次考试,先深刻的反省一下没有学好递归,在此放上正解。
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0;
char ch;
bool flag=true;
for(;ch>'9'||ch<'0';ch=getchar())
if(ch=='-')
flag=false;
for(;ch>='0'&&ch<='9';ch=getchar())
x=x*10+ch-'0';
return flag?x:-x;
}
int n,k;
int ans=1;
void rec(int n)
{
if(n<=k) return;
if((n+k)%2==1) return;
ans++;
rec((n+k)/2);
rec((n-k)/2);
}
int main()
{
n=read();
k=read();
rec(n);
cout<<ans<<endl;
return 0;
}
本次考试,第一题是一道佷水的题,但我居然用了将近半个小时才AC,其主要原因是
(没有认真读题目)。
唉,多年的老毛病了
但就是改不掉,也对他无可奈何。简单的讲,第一题恰好就是一个很简单的贪心算法,掠过不总结。
第二题呢,又是一个白痴错误:
数组开小了…………
但这也只是一部分的原因,其中本人的主要错误在于对时间复杂度的把握为0;导致了循环的对象把握不准,据本班的以为蒟蒻说,
在循环的过程中产生了一坨垃圾数据。
第三题无害水过。
第四题就是传说中的递归了
题意大概是这样的:long long ago 有一帮家伙去探险,当他们遇到查到的时候,如果人数
允许分成相差为k的两队,就分头行动,否则就原地考察。
其实这一题非常
地简单,但也就是因为它非常的简单,本人的数学思维就是跟不上,导致崩盘,其中本人对递归的理解也不够,当看到100000000的数据的时候整个人都是懵逼的,也无法认真的思考,表明心里素质也不是太好。
最后一题涉及到
dp,也是一道非常友好
(三善)
的
题目;
但本人硬是在找到了规律的情况下写了暴力搜索,说明本人对dp的熟练程度也是远远不够的,但正好也是近几天才学的,复习起来倍感亲切。