P1161 开灯-C语言
1、题目
2、解题过程
(1)第一次 超时 #define LIGHT 20000//灯的最大值
结果:
代码:
//洛谷 P1161 开灯
#include <stdio.h>
#define NUM 5000//n<=5000
#define LIGHT 20000//灯的最大值
int main() {
int n;//进行n次操作
int light[LIGHT] = { 0 };//初始值为关0
double a[NUM] = { 0.0 };
int t[NUM] = { 1 };
int k;//需要按开关的编号
int i,j;
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
scanf_s("%lf %d", &a[i], &t[i]);
for (j = 1; j <= t[i]; j++) {//灯的编号从1开始
k = (int)(a[i]*j);//向下求整
light[k] = (light[k] == 0) ? 1 : 0;//切换灯的状态
}
}
i = 1;//从第一盏灯开始遍历
while (light[i] == 0) {//灯的状态为关
i++;
}
printf("%d",i);//灯的状态为开的编号
return 0;
}
(2)第二次
结果:
代码:
//洛谷 P1161 开灯
#include <stdio.h>
#define NUM 5000//n<=5000
#define LIGHT 20000//灯的最大值
int main() {
int n;//进行n次操作
int light[LIGHT] = { 0 };//初始值为关0
double a[NUM] = { 0.0 };
int t[NUM] = { 1 };
int k;//需要按开关的编号
int i,j;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%lf %d", &a[i], &t[i]);
for (j = 1; j <= t[i]; j++) {//灯的编号从1开始
k = (int)(a[i]*j);//向下求整
light[k] = (light[k] == 0) ? 1 : 0;//切换灯的状态
}
}
i = 1;//从第一盏灯开始遍历
while (light[i] == 0) {//灯的状态为关
i++;
}
printf("%d",i);//灯的状态为开的编号
return 0;
}