求大佬优化,90分超时,非本站题目
  • 板块题目总版
  • 楼主Newdon
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/27 20:15
  • 上次更新2024/10/27 21:24:39
查看原帖
求大佬优化,90分超时,非本站题目
1029109
Newdon楼主2024/10/27 20:15

题目

问题描述

大联欢的最后项目是小明和小李的射击比赛。比赛规则是这样的,每次两人同时射 击, 每个人有 S 枚子弹进行射击,第 1 秒两人同时打出第一枚子弹,以后的s-1 子弹可 以自己根据一定的间隔时间打出,设小明后面的子弹每隔 t1 秒打出一枚子弹,小李后 面的子弹每隔 t2 秒打出一枚子弹, 如 t1=2 时, 则小明子弹打出的时刻分别为 1,4,7,10,13 ,… ,同理可得小李子弹打出的时刻。如果某一时刻两人同时打出子弹, 则 只能听到一次响声, 你知道这两个人的比赛过程中我们共能听到几次枪声吗?

[输入格式]

输入数据共有三行.

第一行有一个正整数 S,它的范围[1..100000]。

第二行有一个正整数 t1,它的范围[1..10000]。

第三行有一个正整数 t2,它的范围[1..10000]。

[输出格式]

比赛过程中能听到几次枪声。

[输入样例]

5

2

3

[输出样例]

8

代码:

#include<bits/stdc++.h>
using namespace std;
long long s,t1,t2,a[100005],b[100005],x=1,y=1,t,q;
int main(){
	cin>>s;
	cin>>t1;
	cin>>t2;
	for(int i=1;i<=s;i++){
		a[i]=x;
		b[i]=y;
		x=x+t1+1;
		y=y+t2+1;
	}
	for(int i=1;i<=s;i++){
		for(int j=1;j<=s;j++){
			if(a[i]==b[j]){
				a[i]=-1;
				b[j]=-1;
			}
		}
	}
	for(int i=1;i<=s;i++)
		if(a[i]==-1)q++;
	for(int i=1;i<=s;i++)
		if(b[i]==-1)q++;
	s*=2;
	s-=q;
	q/=2;
	cout<<s+q;
	return 0;
}
2024/10/27 20:15
加载中...