自己给自己挖的坑(未完待续)

1.http://codevs.cn/problem/5929/

原因:不读题,不读题,不读题,合并了错误节点,自以为是std写的天衣无缝,样例也AC,但是没有意识到样例是很水的,另外,挪用代码也是很不好的习惯。

2.QBXT两次考试

原因:cena的旧版编译器没有优化STL+cena对STL动态内存的兼容性,导致疯狂TLE...

3.http://poj.org/problem?id=1979

原因:初始节点忘记设置访问数组为已经访问过,导致在某些数据下会多输出1,然后bad fix这个bug,AC样例,然而样例太水,三组数据是一种类型,然后果断WA...后期自己造测试数据:

3 4
@...
####
####

成功多出一个点来(程序输出5,明显地应该输出4)。

果断重新调试并fix之,再次Submit,AC.

4.http://www.cnblogs.com/TheRoadToAu/p/7097726.html

原因:不读题,对STL了解不够,不清楚坑点,本来该用multiset用成了set,卡掉30分(70->40)...

5.https://www.luogu.org/problem/show?pid=1965

原因:没有对每一个运算数进行取模运算,以为不会Boom,结果Boom了long long,怎么也查不错来,一直30分...

 1 #include<cstdio>
 2 using namespace std;
 3 
 4 inline long long FP(int a,int b,int mod)
 5 {
 6     if(b==0)return 1;
 7     int ans=1,base=a;
 8     while(b)
 9     {
10         if(b&1)
11             ans=(ans*base)%mod;
12         base=(base%mod)*(base%mod)%mod;
13         b>>=1;
14     }
15     return ans;
16 }
17 
18 int n,m,k,x;
19 int main()
20 {
21     scanf("%d%d%d%d",&n,&m,&k,&x);
22     printf("%lld
",(m*FP(10,k,n)+x)%n);
23     return 0;
24 }
AC

 

6.https://www.luogu.org/problem/show?pid=2278

原因:对于优先队列和重载运算符使用不熟练,本地CE……

以后尽量使用重载运算符而非结构体伪函数(节省代码量+看着顺眼)。

记得重载二元运算符的一般方式:

ReturnType operator Operator (const DataType &ArgumentName) const

{return this->member ...}

例如以下的重载运算符:

struct Process{
    int PID,StartTime,ETA,Rank;
    bool operator < (const Process &b) const
    {
        return this->Rank<b.Rank||this->Rank==b.Rank&&this->PID>b.PID;
    }
}ProcessList[1000000];
int n,rest,cnt=1,sz=0,time;
priority_queue<Process> Q;

重载运算符的好处:对于优先队列,自定义数据类型不需要手写另外一个结构体(或定义一个类型)写伪函数,并写一个比较长的定义。

手写伪函数:

struct XY
{
    int num,s,t,val;
} v[1000000];
struct cmp
{
    bool operator ()(XY &a,XY &b)
    {
        return a.val<b.val||a.val==b.val&&a.num>b.num;
    }
};
priority_queue<XY,vector<XY>,cmp> Q;

 7.

促销

【题目描述】

某某商场搞了一个促销活动,促销活动以以下方式进行:

  1. 一个想要参加活动的顾客将他的发票扔进抽奖箱里。
  2. 在每天的最后,从抽奖箱里抽出两张发票:

a) 金额最大的发票a

b) 金额最小的发票b

  1. 金额最大的发票的持有者得到a-b的奖金。

每天被抽出的发票都不会再被放回抽奖箱里。 

你想知道促销活动结束时一共付出了多少奖金。

【输入格式】

第一行一个N,促销进行的天数;

接下来N行,第一个数是一个ki,表示第i天收到的发票数;接下来ki个数,每个数是一个发票的金额。

【输出格式】

一个数,整个促销活动过程中一共付出了多少奖金。

【输入输出样例】

promotion.in

promotion.out

5

3 1 2 3

2 1 1

4 10 5 5 1

0

1 2

19

【数据规模】

对于30%的数据,发票总数M不超过2000;

对于另外20%的数据,每张发票的金额不超过2000;

对于100%的数据,发票总数M不超过1000000,每张发票的金额不超过1000000。

原因:Cena...我不得不再次吐槽你一次...您不能用%lld算怎么回事啊23333...您换个别的编译器会死吗...我的50分就gg了...

solution:

#ifdef __WIN32

    #define lld "%I64d"

    #define llu "%I64u"

#else

    #define lld "%lld"

    #define llu "%llu"

#endif

以后用lld与llu替代“%lld”与“%llu”...

3.

原因:freopen, fclose, stdin, stdout在cstdio库里!!!不论何时都要引用cstdio,以防爆炸!!!

4.

原因:Windows下换行编码为 ,Linux下换行符为 ,CRT出了锅,数据在Windows下生成,结果读入字符时读入了一个' '.

solution: 不用scanf读入字符。直接读入字符串。

5.

原因:矩阵乘法不具有交换律!!!!!!!!矩阵乘法不具有交换律!!!!!!!!矩阵乘法不具有交换律!!!!!!!!矩阵乘法不具有交换律!!!!!!!!矩阵乘法不具有交换律!!!!!!!!矩阵乘法不具有交换律!!!!!!!!

原文地址:https://www.cnblogs.com/TheRoadToAu/p/6700909.html