7/18赛后总结

· · 个人记录

我先自首,T3 我两个都打成 stdin

其实我考试时 T4freopen 也打错了,但是 T4 无论我打没打错,都是 0

为了防止打错 freopen 这种低级错误再次发生,我写了一个函数。

void foropen(string name){
    string a,b;
    a=name+".in";
    const char *a1=a.data(); 
    freopen(a1,"r",stdin);
    b=name+".out";
    const char *b1=b.data(); 
    freopen(b1,"w",stdout);
}

使用 foropen 函数时,只需将题目名称填写进去,无需考虑 rwstdinstdout 。妈妈再也不用担心我 freopen 打错了。

bbcoj 测试过了,可以正确运行!

错误合计又加加

freopen 写对了吗?

int 类型函数写 return 了吗?

调试代码注释了吗?

多测清空了吗?

long long 了吗?

数组开够了吗?

二分答案有单调性吗?

思路正确性不确定打对拍了吗?

T1 多国语言(language)

## T2 达不优(double) $\color{green}\text{AC}$ 原因:字符串习惯,我习惯于写 ``+=``。 我之前做一道 [hack题](luogu.com.cn/problem/B3704) 题解是这样说的: ![](https://cdn.luogu.com.cn/upload/image_hosting/qedv1bub.png) 合理怀疑 ``size()`` 函数也有这样的特性。 ## T3 活动(activity) 啊!``freopen`` 写错了! ~~我以前觉得写错 ``freopen`` 的人都是傻子,今天才知道微小的错误也能带走全部分数!~~ 考试的时候,第一下就想到 ``dp``。 ```cpp #include<bits/stdc++.h> using namespace std; #define int long long int dp[10000000]; const int MOD=998244353; int m,n; signed main(){ freopen("activity.in","r",stdin); freopen("activity.out","w",stdout); int n,x,y;cin>>n>>x>>y; dp[0]=1; for(int i=1;i<=n;i++){ if(i==y)continue; for(int j=i;j<=x;j++){ if(j-i<=i)dp[j]=dp[j]+dp[j-i],dp[j]%=MOD; } } cout<<dp[x]%MOD; return 0; } ``` 成功拿到部分分 $65$ 分! ## T4 迷宫(maze) 考试的时候遇到了一个神奇的现象,最后输出不乘以 $3$,能过小样例,不能过大样例;乘以 $3$ 即过不了小样例,也过不了大样例。最后赌了不乘以 $3$ 的代码,但是也爆 $0$ 了。