CCF 201709-5 除法 c++题解

问题描述
试题编号: 201709-5
试题名称: 除法
时间限制: 10.0s
内存限制: 256.0MB
问题描述:
问题描述
  小葱喜欢除法,所以他给了你 N个数 a 1a 2, ⋯,  aN,并且希望你执行 M次操作,每次操作可能有以下两种:
  给你三个数 lrv,你需要将 alal +1, ⋯,  ar之间所有 v的倍数除以 v
  给你两个数 lr,你需要回答 al +  al +1 + ⋯ +  ar的值是多少。
输入格式
  第一行两个整数 NM,代表数的个数和操作的次数。
  接下来一行 N个整数,代表 N个数一开始的值。
  接下来 M行,每行代表依次操作。每行开始有一个整数 opt。如果 opt=1,那么接下来有三个数 lrv,代表这次操作需要将第 l个数到第 r个数中 v的倍数除以 v;如果 opt = 2,那么接下来有两个数 lr,代表你需要回答第 l个数到第 r个数的和。
输出格式
  对于每一次的第二种操作,输出一行代表这次操作所询问的值。
样例输入
5 3
1 2 3 4 5
2 1 5
1 1 3 2
2 1 5
样例输出
15
14
评测用例规模与约定
  对于30%的评测用例,1 ≤  NM ≤ 1000;
  对于另外20%的评测用例,第一种操作中一定有 l =  r
  对于另外20%的评测用例,第一种操作中一定有 l = 1 ,  r =  N
  对于100%的评测用例,1 ≤  NM ≤ 10 5,0 ≤  a 1a 2, ⋯,  aN ≤ 10 6, 1 ≤  ≤ 10 6, 1 ≤  l ≤  r ≤  N
#include<iostream>

using namespace std;

int main(){
	int n,m,a[100000],c[100000];
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	int flag=0;
	for(int j=0;j<m;j++){
		int h,b[10];
		cin>>h;
		for(int j1=0;j1<4-h;j1++)
			cin>>b[j1];
		if(h==1){
			for(int j2=b[0]-1;j2<b[2];j2++){
				if(a[j2]%b[2]==0)
					a[j2]=a[j2]/b[2];
			}
		}
		else if(h==2){
			int tol=0;
			for(int j3=b[0]-1;j3<b[1];j3++){
				tol+=a[j3];
			}
			c[flag]=tol;
			flag++;
		}
	}
	for(int i2=0;i2<flag;i2++)
		cout<<c[i2]<<endl;
}

猜你喜欢

转载自blog.csdn.net/qq_27524749/article/details/79592291