常用代码及经验总结(不断更新)

2017-08-25 16:59:48

  今天遇到一个很神奇得体cf 35C

      如果不用以下这个代码就过不去??!!  

  竟然连test1都过不去

    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    ios_base::sync_with_stdio(false);

  所以以后还是要加上这段代码的

找到原因了,感觉自己好傻

这个题有说明了,之前PDF中已经明白题意所以没有仔细看题目,以后还是要小心了

 

以下是看cf 上大佬经常用的一些小代码

#include <bits/stdc++.h>
#define PI pair
#define pi acos(-1.0)
#define mem(a) memset(a,0,sizeof(a))
#define mems(a,b) memset((a),(b),sizeof(a))
#define ll long long
#define ull unsigned long long
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define REP(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
#define ls root<<1
#define rs root<<1|1
#define Ls root<<1,l,mid
#define Rs root<<1|1,mid+1
#define pb push_back
#define IOS ios::sync_with_stdio(false),cin.tie(0);
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const double eps=1e-8;
const int maxn=200000+10; 
using namespace std;


#define ll long long int
#define fast_io ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
#define rep(i,a,b) for(ll i=a;i<=b;i++)
#define rev(i,a,b) for(ll i=a;i>=b;i--)
#define pll pair<ll,ll>
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define V vector<ll>
#define print2(x) cout <<"####"<< #x <<"  =>  "<<x<< endl
#define print1(x) cout <<"****"<< #x <<"  =>  "<<x<< endl

 

2017-08-26 11:55:55

今天做的这个题Subset已经做了好几遍了,但是还是有问题,

今天给我最大的教训就是要注意数据类型,本来应该用longlong的用来int当然会一直wa

找各种逻辑错误,测试各种例子,却没有考虑到当给出比较大的数据的时候会溢出

 

2017-08-28 10:59:59

今天做的一道水题,二进制处理的题目,很简单,但是给我提醒了

首先:以后写代码要标注好开始时间和结束时间,用时间来限制

其次:以后写代码要写一部分就调试一部分,养成良好习惯

 

2017-08-29 10:30:08

要注意没有思路就不要再电脑前面干耗着,要拿出来纸笔开始写写画画,

不要着急,大体弄清思路才开始编码,要不然会导致效率低下;

 

2017-08-30 16:55:02

今天调试了很长时间,所以说以后还是尽量一次成功,调试花的时间实在是太长了

以后应该先想好在开始敲代码:

主要错误发现:

1、边界问题,大于小于号搞反了,还有 Mid >= r Mid < l如果都取等就会出现问题

2、输入输出问题,虽然之前测试了各种输入方式的快慢,但是还是有问题出现的,

为了保险起见,还是用scanf比较好,以后坚决不用cin cout 这两个太坑爹了

 

2017-08-31  19:11:42

 

总结:

 

1、这个也是采用每次一调试的办法来做的,但是这次调试中出现了重大失误,由于对以上两个函数调试的不严谨,

 

判断数据过小,导致小的数据可以过,但是大一点的数据就会失败的情况,这也是这么多次wa的原因

 

2、还是没有习惯用printf,所以以后写代码就加上fast_io,以后写代码尽量使用带加速到cin函数

 

3、数据生成器用另外一个project来写,用生成的数据进行对拍,这次发现错误考的就是对拍,没有对拍就很难改下去了,

 

这道题的对拍比较好些,虽然我用的是别人的代码做的对拍,但是这个对拍很容易写出来,就是运行时间有点长

 

4、这次还有重大错误就是定义域问题,使用memset的时候要看清作用的范围,还有各种初始化条件,都要关心每一遍的

 

遍历的作用

 

5、另外在面对一个循环中的多次询问,要保证每次的询问对下次的询问没有影响,恢复现场才可以。

 

6、hdu可以用bits/stdc++.h头文件

 

22:26:40

学dp入门的几个点:

1、状态真的很难想, 需要做很多题累积很多经验才可以

2、动态规划为了强调记忆性,可以采用自顶向下和自底向上两种方法

3、对于复杂的感觉很混乱的题目要分析其中的规律,比如对称,从某一个尾部的状态开始分析,

往前推导一下,就有可能找到状态

4、用tmp--变数--来维护一个区间值,可以不重复计算该区间的值,达到减少重复的效果,是dp中常用的方法;

5、有一个经验是题目中给的数据的范围一般就是dp的范围

6、dp经常会用到取模,但是如果用int的话可能在mod之前就会overflow,所以建议用long long

 

posted @ 2017-08-25 17:03  pprp  阅读(322)  评论(0编辑  收藏  举报