n维前缀和公式生成器
  • 板块灌水区
  • 楼主joeylin
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/8/17 12:54
  • 上次更新2024/8/17 15:48:18
查看原帖
n维前缀和公式生成器
1023407
joeylin楼主2024/8/17 12:54
#include<bits/stdc++.h>
using namespace std;
int n;
bool is_m[int(1e6)],have;
void coca(int mines,int pos,bool am)
{
	if(mines == 0||(pos > n&&mines == 0))
	{
		am?printf("+"):printf("-");
		printf("S_{");
		for(int i=1;i<=n;i++)
		{
			if(i != 1) is_m[i]?printf(",i_{%d}-1",i):printf(",i_{%d}",i);
			else is_m[i]?printf("i_{%d}-1",i):printf("i_{%d}",i);
		}
		printf("}");
		return ;
	}																																																																																			
	else if(pos > n||mines == 0) return ;
	is_m[pos] = 1;
	coca(mines-1,pos+1,am);
	is_m[pos] = 0;
	coca(mines,pos+1,am);
}
void cocb(int l,int pos,bool am)
{
	if(l == 0||(pos > n&&l == 0))
	{
		if(have) am?printf("+"):printf("-");
		printf("S_{");
		for(int i=1;i<=n;i++)
		{
			if(i != 1) is_m[i]?printf(",l_{%d}-1",i):printf(",r_{%d}",i);
			else is_m[i]?printf("l_{%d}-1",i):printf("r_{%d}",i);
		}
		printf("}");
		return ;
	}
	else if(pos > n||l == 0) return ;
	is_m[pos] = 1;
	cocb(l-1,pos+1,am);
	is_m[pos] = 0;
	cocb(l,pos+1,am);
}
int main()
{
	scanf("%d",&n);//输入n,代表生成n维前缀和
	
	//输出公式,为LATEX格式
	
	printf("$$");
	
	//输出 前缀和数组的预处理公式
	
	printf("S_{i_{1}");
	for(int i=2;i<=n;i++) printf(",i_{%d}",i);
	printf("}=");
	printf("A_{i_{1}");
	for(int i=2;i<=n;i++) printf(",i_{%d}",i);
	printf("}");
	for(int i=1;i<=n;i++) coca(i,1,i%2),memset(is_m,0,sizeof(is_m));
	
	printf("$$\n\n$$");//换行
	
	//输出 计算一个n维的区间的公式
	
	printf("S_{l_{1} \\sim r_{1}");
	for(int i=2;i<=n;i++) printf(",l_{%d} \\sim r_{%d}",i,i);
	printf("}=");
	for(int i=0;i<=n;i++) have = (i != 0),cocb(i,1,(i+1)%2),memset(is_m,0,sizeof(is_m));
	
	
	printf("$$");
}

输入3 输出

$$S_{i_{1},i_{2},i_{3}}=A_{i_{1},i_{2},i_{3}}+S_{i_{1}-1,i_{2},i_{3}}+S_{i_{1},i_{2}-1,i_{3}}+S_{i_{1},i_{2},i_{3}-1}-S_{i_{1}-1,i_{2}-1,i_{3}}-S_{i_{1}-1,i_{2},i_{3}-1}-S_{i_{1},i_{2}-1,i_{3}-1}+S_{i_{1}-1,i_{2}-1,i_{3}-1}$$

$$S_{l_{1} \sim r_{1},l_{2} \sim r_{2},l_{3} \sim r_{3}}=S_{r_{1},r_{2},r_{3}}-S_{l_{1}-1,r_{2},r_{3}}-S_{r_{1},l_{2}-1,r_{3}}-S_{r_{1},r_{2},l_{3}-1}+S_{l_{1}-1,l_{2}-1,r_{3}}+S_{l_{1}-1,r_{2},l_{3}-1}+S_{r_{1},l_{2}-1,l_{3}-1}-S_{l_{1}-1,l_{2}-1,l_{3}-1}$$

Si1,i2,i3=Ai1,i2,i3+Si1−1,i2,i3+Si1,i2−1,i3+Si1,i2,i3−1−Si1−1,i2−1,i3−Si1−1,i2,i3−1−Si1,i2−1,i3−1+Si1−1,i2−1,i3−1S_{i_{1},i_{2},i_{3}}=A_{i_{1},i_{2},i_{3}}+S_{i_{1}-1,i_{2},i_{3}}+S_{i_{1},i_{2}-1,i_{3}}+S_{i_{1},i_{2},i_{3}-1}-S_{i_{1}-1,i_{2}-1,i_{3}}-S_{i_{1}-1,i_{2},i_{3}-1}-S_{i_{1},i_{2}-1,i_{3}-1}+S_{i_{1}-1,i_{2}-1,i_{3}-1}

Sl1∼r1,l2∼r2,l3∼r3=Sr1,r2,r3−Sl1−1,r2,r3−Sr1,l2−1,r3−Sr1,r2,l3−1+Sl1−1,l2−1,r3+Sl1−1,r2,l3−1+Sr1,l2−1,l3−1−Sl1−1,l2−1,l3−1S_{l_{1} \sim r_{1},l_{2} \sim r_{2},l_{3} \sim r_{3}}=S_{r_{1},r_{2},r_{3}}-S_{l_{1}-1,r_{2},r_{3}}-S_{r_{1},l_{2}-1,r_{3}}-S_{r_{1},r_{2},l_{3}-1}+S_{l_{1}-1,l_{2}-1,r_{3}}+S_{l_{1}-1,r_{2},l_{3}-1}+S_{r_{1},l_{2}-1,l_{3}-1}-S_{l_{1}-1,l_{2}-1,l_{3}-1}

2024/8/17 12:54
加载中...