请问这段代码算法有什么问题,用的是把开灯序号放入数组,关灯用-1赛题。,
  • 板块P1161 开灯
  • 楼主HTML19990601
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/29 22:10
  • 上次更新2024/10/30 13:14:25
查看原帖
请问这段代码算法有什么问题,用的是把开灯序号放入数组,关灯用-1赛题。,
1546843
HTML19990601楼主2024/10/29 22:10

不谈超时,只有部分能AC, 请大佬帮我看一看算法有没有漏洞,求求了。

#include<bits/stdc++.h>

using namespace std;

int get_max_at(double,int);//获取上界
int push();
int remove(); 

int main(){
	int got_num;
	cin >> got_num;
	int max_t = 0;
	double store_a[got_num];
	int store_t[got_num];
	for(int i=0;i<got_num;i++){
		double a;
		int t;
		cin >> a >> t;
		store_a[i] = a;
		store_t[i] = t;
		if(t >= max_t){
			max_t = t;
		}
	}
	int a[max_t*5000];
	for(int i = 0;i<=max_t;i++){
		a[i] = -1;
	}
	for(int i = 0;i<got_num;i++){
		int now_num = 0;
		for(int j = 1;j<=store_t[i];j++){
			int q = get_max_at(store_a[i],j);
			//cout<< q << " ";
			for (int k = 0;k<max_t*5000;k++){
				//cout << q << a[k] << " ";
				int boo = 0;
				for (int z = k;z<max_t;z++){
					if (a[z] == q){
						a[z] = -1;
						boo = 1;
					}
				}
				if (boo == 1){
					break;
				}
				if(a[k] !=-1 && a[k] != q){
					continue;
				}
				a[k] = q; 
				break;
			}
		}
	} 
	for(int k = 0;k<max_t;k++){
		//cout << a[k] << " ";
		if (a[k] != -1){
			int b = 0;
			cout << a[k];
			break;
		}
	}
	return 0;
}

int get_max_at(double a,int t){
	//计算整数部分上限
	int zmax = floor(a)*t;
	//计算小数部分上限 
	int fmax = ((a*1000000 - floor(a)*1000000)*t)/1000000;
	return zmax + fmax;
}
2024/10/29 22:10
加载中...