额mmmmmm,萌新需要差分求助
  • 板块学术版
  • 楼主AlexandreLea
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/5/29 22:42
  • 上次更新2023/11/7 01:29:25
查看原帖
额mmmmmm,萌新需要差分求助
322792
AlexandreLea楼主2020/5/29 22:42
//Probelm=
//Algorithm=
/*
Input-1

Output-1

*/

#include<fstream>
#include<iostream>
using namespace std;
//==========输入输出流的定义==========
ifstream fin("input.txt");
ofstream fout("output.txt");

//==========数据的定义============ 
int Differ[1001]; //差分数组 
int NumberOfData; //我想不用说你也知道 
int NumberOfOper; //我想不用说你也知道 

//==========差分初始化函数==========
void Differ_Init(int Data,int Postation){
	if(Postation==1) Differ[Postation]=Data;
	else Differ[Postation]=Differ[Postation-1]-Data;
}

//==========差分动作函数==========
void Differ_Operation(int Function,int Head,int Tail,int Addr){
	if(Function==1){ //求差分和 
		int Answer=0,Xddr=0;
		for(int i=1;i<=Tail;i++){
			Xddr+=Differ[i];
			Answer+=Xddr;
		}
		fout<<Answer<<endl;
	}else if(Function==2){ //改差分值 
		Differ[Head]+=Addr;
		Differ[Tail+1]-=Addr;
	}
} 

//==========为GDB写的函数==========
void Print_Differ(int tail){
	int value=0;
	for(int i=1;i<=tail;i++){
		value+=Differ[i];
		cout<<value<<" ";
	}
}
//==========主函数========== 
int main(){
	//=====输入数据===== 
	int Value;
	fin>>NumberOfData>>NumberOfOper;
	for(int i=1;i<=NumberOfData;i++){
		fin>>Value;
		Differ_Init(Value,i);
	}
	
	//=====差分动作+输出数据=====
	int Addr,Function,Head,Tail;
	for(int i=1;i<=NumberOfOper;i++){
		fin>>Function;
		Addr=0;
		if(Function==1) fin>>Head>>Tail;
		else if(Function==2) fin>>Head>>Tail>>Addr;
		Differ_Operation(Function,Head,Tail,Addr);
	} 
	return 0;
}

输入

5 1
5 4 3 2 1
1 1 5

输出

10

在下哪里错了不知道,请高手多多指教!

2020/5/29 22:42
加载中...