7/18赛后总结
Wangjunhao2011
·
·
个人记录
我先自首,T3 我两个都打成 stdin了
其实我考试时 T4 的 freopen 也打错了,但是 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 函数时,只需将题目名称填写进去,无需考虑 r,w和stdin,stdout 。妈妈再也不用担心我 freopen 打错了。
bbcoj 测试过了,可以正确运行!
错误合计又加加
freopen 写对了吗?
int 类型函数写 return 了吗?
调试代码注释了吗?
多测清空了吗?
开 long long 了吗?
数组开够了吗?
二分答案有单调性吗?
思路正确性不确定打对拍了吗?
T1 多国语言(language)
## T2 达不优(double)
$\color{green}\text{AC}$ 原因:字符串习惯,我习惯于写 ``+=``。
我之前做一道 [hack题](luogu.com.cn/problem/B3704)
题解是这样说的:

合理怀疑 ``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$ 了。