题干文本有问题?
  • 板块P1161 开灯
  • 楼主AlbusRiddle
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/11/22 11:25
  • 上次更新2024/11/22 16:04:00
查看原帖
题干文本有问题?
1449687
AlbusRiddle楼主2024/11/22 11:25

题干里说:路灯的编号从1开始 但是,当我从1开始编号输出时,我的输出答案总是比标准答案大1。

#include<stdio.h>

int main()
{
	int n;//定义轮数
	scanf("%d",&n);
	double a[n];
	long t[n],max=0;//定义一个max,表示这所有n轮操作所涉及到的最大编号,免得浪费内存(萌新理解)
	for(int i=0;i<n;i++)
	{
		scanf("%lf %ld",&a[i],&t[i]);
		if(max<((long)(a[i]*t[i])))
			max=((long)(a[i]*t[i]));//遍历获取最大编号
	}
	int lit[max]={0};//定义路灯数组,0表示关,1表示开
	for(int i=0;i<n;i++)
	{
		for(long j=1;j<=t[i];j++)
			lit[(long)(a[i]*j)]=1-lit[(long)(a[i]*j)];//用强制转换定位,开关路灯
	}
	for(long i=0;i<max;i++)
	{
		if(lit[i])//若编号为i的路灯是开着的
		{
			printf("%ld",i+1);
			return 0;
		}
	}
}

可知,测试机默认是从0开始给路灯编号; 于是,我直接输出数组的角标,反而对了。。。

#include<stdio.h>

int main()
{
	int n;
	scanf("%d",&n);
	double a[n];
	long t[n],max=0;
	for(int i=0;i<n;i++)
	{
		scanf("%lf %ld",&a[i],&t[i]);
		if(max<((long)(a[i]*t[i])))
			max=((long)(a[i]*t[i]));
	}
	int lit[max]={0};
	for(int i=0;i<n;i++)
	{
		for(long j=1;j<=t[i];j++)
			lit[(long)(a[i]*j)]=1-lit[(long)(a[i]*j)];
	}
	for(long i=0;i<max;i++)
	{
		if(lit[i])
		{
			printf("%ld",i);//就只是在这里把“+1”删掉后,全部AC
			return 0;
		}
	}
}

(所以这是因为题干与测试机的数据不匹配导致的吗?) (萌新想@管理员,奈何不会。。。大佬们帮忙@一下好吗。。。希望洛谷越来越好)

2024/11/22 11:25
加载中...