首页 > 其他分享 >错题本

错题本

时间:2022-11-07 15:55:10浏览次数:56  
标签:cnt return vis int LL 错题 dis

posted on 2021-10-03 11:22:24 | under 学术 | source

哇,这个 SB 怎么这么喜欢挂分。

不行,要记录一下是怎么挂分的,防止 CSP-J/S 挂分。<= 年少无知,应该是防止丢掉提高一等

41

bool check(int j,const char*a){
	int m=strlen(a+1);
//                   ^~~
	for(int i=0;i<m;i++){
		if(s[i+j]!='?'&&s[i+j]!=a[i]) return 0;
	}
	return 1;
}
if(check(i+1,"sakana"))

下标人属于是

40

近日有出题人使用模数 \(998244{\color{red}8}53\) 导致 100->10 距今 0 天警钟长鸣

近日有出题人使用模数 \(99{\color{red}3}244353\) 导致 ?->? 距今 0 天警钟长鸣

39

喜报:近日广东一考生竟反向容斥(斥容),WA on test 9,距今一天,警钟长鸣

for(int i=m;i>=1;i--){
	for(LL j=1;j*j<=i;j++){
		if(i%j==0){
			if(i!=j) l[i]=(l[i]-l[j]+P)%P;
			if(i/j!=j&&j!=1) l[i]=(l[i]-l[i/j]+P)%P; 
		}
	}
} 

注解:\(l_i={\tt constant}-\sum_{j|i,j<i}l_j\) 的容斥,正确写法为:

for(int j=1;j<=m;j++){
	for(int i=j+j;i<=m;i+=j) l[i]=(l[i]-l[j]+P)%P;
}
for(int i=1;i<=m;i++){
	for(int j=1;j*j<=i;j++){
		if(i%j==0){
			if(i!=j) l[i]=(l[i]-l[j]+P)%P;
			if(i/j!=j&&j!=1) l[i]=(l[i]-l[i/j]+P)%P; 
		}
	}
} 

38

喜报:近日……乘法不开 LL,……警钟长鸣

for(int i=1;i<=m;i++) f[i]=qpow(i*(i+1)/2,n);
//m<=1e5

37

喜报:近日广东一考生试图用 scanf("%1d") 输入 \(4\times 10^6\) 个 0/1 数字,卡成暴力,距今 1min,警钟长鸣

注:被卡常了

36

喜报:近日广东一考生在模拟赛中使用如下代码,整题 RTE,距今 1h,警钟长鸣

LL f[510][200010];
//注:空间 700 MB

喜报:近日广东一考生在 4h 的模拟赛中冲了 2h 的 D,最终直接爆零,距今 2h,警钟长鸣

35

SS @NobodyThere 提高 T2 编译错误 警钟长鸣

#define positive [](int x){return x>0;}

void init(bool lim(int x)){
	puts("compile error");
}
init(positive);

#include <functional>
void init(std::function<bool(int)> lim){
	puts("Accepted");
}
init(positive);

考场 Dev-c++ 能过编译。

34

LL dp(){
    for(int i=1;i<=n;i++) f[i]=1e18;
    for(int i=n+1;i<=n*2;i++) f[i]=-1e18;
    for(int i=1;i<=n;i++) if(!deg[i]) q.push({f[i],i});
    for(int i=n+1;i<=n*2;i++) if(!deg[i]) f[i]=0,expand(i);
	//...
}

\(f_i\) 没有初始化!

有的时候发现写出来的代码没过样例,一种可能是写挂了(代码问题),一种可能是你假掉了(你的问题),一般是前者呢

33

LL solve2(int l,int r){
//	f[l-1]=0;
//	LL res=0;
//	for(int i=l;i<=r;i++){
//		f[i]=(a[i]*(f[i-1]+1)+(1-a[i])*f[i-1]%P*T)%P;
//		//f[i]=a[i]*f[i-1]+a[i]-a[i]*f[i-1]*T+f[i-1]*T
//		//    =f[i-1]*(a[i]-a[i]*T+T)+a[i]
//		res=(res+(f[i-1]+1)*a[i])%P;
//	}
//	return res;
	return ((f0*ccf.query(l,r))[0][1]+t.query(r)-t.query(l-1))%P;
}

看到那个 \(1-a[i]\) 了吗?减爆了,没取模,样例过不了,而开始怀疑算法正确性。

32

void dp(){
	f[0][0][0]=1;
	for(int i=1;i<=n*2;i++){
		for(int j=0;j<=n;j++){
			for(int k=0;k<=n*(n-1)/2;k++){
				f[i&1][j][k]=((f[(i^1)&1][j-1][k]+g[(i^1)&1][j+1][k])%P-g[(i^1)&1][j+1][k-j-1]+P)%P;
//				printf("f[%d][%d][%d]=%d\n",i,j,k,f[i][j][k]);
			}
			g[i&1][j][0]=f[i&1][j][0];
			for(int k=1;k<=n*(n-1)/2;k++) g[i&1][j][k]=(g[i&1][j][k-1]+f[i&1][j][k])%P;
		}
	}
}

\(k-j-1\) 会越界的呢

31

李超线段树,写不写等号都可以,但是

void insert(func<T> f,int p,int l,int r){
		int mid=(l+r)>>1;
		switch((tag[p](l)<=f(l))+(tag[p](r)<=f(r))){
			case 2: tag[p]=f; break;
			case 1: insert(f,p<<1,l,mid),insert(f,p<<1,mid+1,r);break;
		}
	}

注意第二个 insert 传的 p

30

限制放松点,一些量是不会变的

29

复杂度分析:分治,\(<B\) 的 \(O(c^{\color{red}3})\),\(\geq B\) 的 \(O(n)\),那么请问你的复杂度是 \(B=\sqrt{n},O(n^{1.5})\) 吗???

\(\sqrt[3]{\quad}\) 分治???真就严格优于暴力

28

试图在 cmd 中输入 color 以运行 color.exe

正确做法:color.exe.\color

27

直径和半径不要混淆!

26

边分治不能统计单点答案

25

dfs 找环!

void dfs(int u,int fa=0){
	if(vis[u]){
		h[++cnt]=u;
		while(stk[top]!=u) h[++cnt]=stk[top--];
		reverse(h+1,h+cnt+1);
		return ;
	}
	vis[stk[++top]=u]=1;
	for(int i=t.head[u];i;i=t.nxt[i]){
		int v=t[i].v; if(v==fa) continue;
        //            ^~~~~~~~~~~~~~~~~~~
		dfs(v,u);
		if(cnt) return ;
	}
}
void dfs(int u){
	if(vis[u]){
		h[++cnt]=u;
		while(stk[top]!=u) h[++cnt]=stk[top--];
		reverse(h+1,h+cnt+1);
		return ;
	}
	vis[stk[++top]=u]=1;
	for(int i=t.head[u];i;i=t.nxt[i]){
		int v=t[i].v;
		dfs(v);
		if(cnt) return ;
	}
}

有向基环树,从一个点出发保证进环。

哪个是对的捏?是第二个,因为你考虑

2 2
1 2
2 1

显然有一个环 \(1\Leftrightarrow 2\),但是因为 v!=fa 的限制,寄了!

其实为什么不用 toposort 呢?

24

//matrix<N,1,int> r;
template<int N> matrix<N,1> operator+(matrix<N,1> &a,matrix<N,1> &b){
	matrix<N,1> r;
	for(int i=1;i<=n;i++)
		for(int k=1;k<=n;k++)
			r[i][1]=(r[i][1]+1ll*a[(i-k+n)%n+1][1]*b[k][1]%P);
	return r;
}

一个括号,一个保龄,今天你溢出了吗

23

语文作文素材 如果 \(k\) 很小,试试容斥

22

T dinic(int s,int t,T inf=1e9){
	    T flow=0;
	    while(bfs(s,t)) flow+=dinic(s,inf,t);
	    return flow;
	}

递归函数

21

方案数,区间 DP 还是背包?

20

如果只有一个未知数,高斯消元可以不需要

19

期望不能割裂,用 DP

18

廊桥分配:当你发现二分没有单调性时,试试滑动窗口

廊桥分配送我退役!

17

对着 \(k\leq n\leq 10^5\) 想了很久,结果 \(k\leq 50\)

16

题目不需要的东西不要维护,谢谢

FHQ-treap 的合并需要保证相对顺序,就是说,只能合并程序分裂的 treap

15

交互:询问次数 \(2n\) 一上来就询问 \(n\) 次

请不要使用没用的分治,慎防假 \(\log\)

14

贪心不能做背包,但是能换

13

树上最远点是直径两端点其中之一

12

LL a[100010];

int del=a[i]-a[i-1];

数据没保证啊

11

“\(n,m\leq 2000\)”

int a[1010][1010]

10

#include <cmath>

/tmp/compiler_2b2px1fj/src: 在函数‘int main()’中:
/tmp/compiler_2b2px1fj/src:50:17: 错误:‘sqrt’在此作用域中尚未声明
   50 |   int k=pri[i]<=sqrt(n)?0:(pri[i]*3>n)+1;
      |                 ^~~~

#include <vector>

/tmp/compiler_tz_45o8w/src:10:1: 错误:‘vector’不是一个类型名
   10 | vector<int> s[1000010];
      | ^~~~~~
/tmp/compiler_tz_45o8w/src: 在函数‘int check()’中:
/tmp/compiler_tz_45o8w/src:15:27: 错误:‘s’在此作用域中尚未声明
   15 |     for(;pos<=n;pos++) if(s[pos].size()<2) break;
      |                           ^
/tmp/compiler_tz_45o8w/src:16:9: 错误:‘s’在此作用域中尚未声明
   16 |     if(!s[pos].size()) pos--;
      |         ^
/tmp/compiler_tz_45o8w/src:17:16: 错误:‘s’在此作用域中尚未声明
   17 |     assertf(1<=s[pos].size()&&s[pos].size()<=2);
      |                ^
/tmp/compiler_tz_45o8w/src: 在函数‘int main()’中:
/tmp/compiler_tz_45o8w/src:29:50: 错误:‘s’在此作用域中尚未声明
   29 |         for(int i=1;i<=n;i++) assertf(dis[i]<=n),s[dis[i]].push_back(i);
      |                                                  ^
/tmp/compiler_tz_45o8w/src:33:32: 错误:‘s’在此作用域中尚未声明
   33 |             printf("%d %d 1\n",s[i][0],s[i+1][0]);
      |                                ^
/tmp/compiler_tz_45o8w/src:38:12: 错误:‘s’在此作用域中尚未声明
   38 |         if(s[pos].size()>1) printf("%d %d 1\n",s[pos][0],s[pos][1]);
      |            ^
/tmp/compiler_tz_45o8w/src:42:40: 警告:格式 ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘LL’ {aka ‘long long int’} [-Wformat=]
   42 |         for(int i=1;i<=n;i++) printf("%d\n",dis[p[i]]);
      |                                       ~^    ~~~~~~~~~
      |                                        |            |
      |                                        int          LL {aka long long int}
      |                                       %lld

缺省源警告

9

线段树特判 \(ql>qr\) 等一系列离谱情况。

8

删调试信息。这种情况,可以在本地编译命令加个 -DLOCAL,然后写个宏定义:

#ifdef LOCAL
#define debug(...) fprintf(stderr,##__VA_ARGS__)
#else
#define debug(...)
#endif

7

LL f(int x){
	return 1ll*x*(x-1)/2;
}
int res=f(114514);

搁着 intLL

6

int d=-114515;
if(d%2==1) printf("odd");
else printf("even");

热知识:-3%2==-1

int mod(int x,int p=P){return (x%p+p)%p;}

5

int maxx(int a,int b){return a>b?b:a;}
//							  ^

你 \(\max\) 你妈呢

4

template<int N> struct dsu{
    int fa[N+10],size[N+10],cnt;
    dsu():cnt(N){for(int i=1;i<=N;i++) fa[i]=i;}
    int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
    bool query(int x,int y){return find(x)==find(y);}
    void merge(int x,int y){
    	int tx=find(x),ty=find(ty);
//							   ^
        if(tx!=ty){
        	fa[ty]=tx;
            size[tx]+=size[ty];
        }
    }
};

自己使用自己

3

int n,m;
graph<100010,300010> g,t;
bool vis[300010];
dsu<100010> s;
int kruskal(){
    int ans=0;
    for(int i=1;i<=g.cnt;i++){
        if(!s.query(g[i].u,g[i].v)){
            vis[i]=1;
            ans+=g[i].w;
            s.merge(g[i].u,g[i].v);
            t.link(g[i].u,g[i].v,g[i].w);
        }
    }
    return ans;
}

请您的 Kruskal 排序

2

void dijkstra(int s,int dis[]){
    priority_queue<node,vector<node>,greater<node> > q;
    memset(dis,0x3f,sizeof dis);
//					^~~~~~~~~~
    memset(vis,0,sizeof vis);
    dis[s]=0,q.push(node(0,s));
    while(!q.empty()){
        int u=q.top().second;q.pop();
        if(vis[u]) continue;
        vis[u]=1;
        for(int i=g.head[u];i;i=g.nxt[i]){
            int v=g[i].v,w=g[i].w;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                q.push(node(dis[v],v));
            }
        }
    }
}

此处 dis 是个指针,int* 的那种,对这个指针取 sizeof,结果是这个指针所占空间大小,而不是这个 SB 想要的 dis 的空间。

两种解决方法:

  1. 在外面 memset(dis,0x3f,sizeof dis),一劳永逸;
  2. memset(dis,0x3f,sizeof(int)*(n+1)),注意是 \(\times (n+1)\)。

1

对拍的时候不要重定义两次文件输入输出,慎防 fc 空文件。

解决方法:看一眼。

标签:cnt,return,vis,int,LL,错题,dis
From: https://www.cnblogs.com/caijianhong/p/error-book.html

相关文章

  • 操作系统复习错题集合
    操作系统复习错题集合​ 主要记一下这个写操作,是增删目录中的目录项​ 文件有逻辑结构和物理结构,逻辑结构有流式和记录式,物理结构有顺序式、索引式、链接式UNIX题目......
  • 错题笔记:int a=b=1这样定义为什么是错误的
    C语言中定义同一类型的多个变量必须以逗号分隔。如:inta,b,c;=在C语言中是赋值运算符,等号左边的变量,必须是已以定义好的变量才可以。inta=b=1;中,若b已经定义,则......
  • 一道C语言改错题
    下午,在上班,读者发来一道题目,问我怎么做。我大概瞄了一眼,看题目也不难。就先让他自己上网查下。过了一会,他说查不到,问了群里,大家也不太会。好吧,起码这位读者自己思考过,也......
  • OS第四章错题补充
    OS第四章错题补充​ 虚拟内存有三种实现方式:请求分页存储管理、请求分段存储管理、请求段页式存储管理。不管哪种方式,都需要有一定的硬件支持以下几个方面:一定容量的......
  • 错题本
    目录字母对应ascii数字编码字母对应ascii数字编码A-Z65-90a-z97122A-Z65-90a-z97122A-Z65-90a-z97122A-Z65-90a-z97122A-Z65-90a-z971220......
  • 考研——操作系统-错题集
    《王道操作系统考研复习指导》  《王道操作系统考研复习指导》1.1.47、9、13、  16、18、 1.2.7 ......
  • 错题记录:C51同一个hex文件偶尔效果不行 的处理方法
    51单片机很多方面和C语言有区别,经验下来,总结以下:1.关于变量报错:报错的原因大多是因为编译器C++版本不同,所以变量我都推荐使用驼峰命名法;2.如果同一个hex文件,或者改的代码......
  • 1.典错题
    逆矩阵因式分解求逆矩阵行列式范德蒙德行列式每行/列元素之和相等递推/归纳1.2.\(\begin{vmatrix}a+b&ab&0&\cdots&0\\1&a+b&ab&\cdots......
  • 考研——现代-错题集(二刷课堂题)
    书上画圈圈的也是 第一章行列式启示:第二种解题方法 ......
  • OS第三章错题补充
    OS第三章错题补充​ 批处理作业调度原则:公平性、极大的流量、平衡资源使用​ ​ 每个进程申请该类资源最多为4,6*3=18,再加上一个额外的资源,所以20个资源完全够6个程序使......