基础赛T5 TLE最后一个点求助
  • 板块学术版
  • 楼主Qin_windlight
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 18:54
  • 上次更新2024/11/23 21:12:01
查看原帖
基础赛T5 TLE最后一个点求助
1490511
Qin_windlight楼主2024/11/23 18:54
#include <bits/stdc++.h>

using namespace std;

const int N = 1e4+5;
const int INF = 1e8;

// #define int long long

int read(){
	int s=0,t=1;
	char c=getchar();
	while(!isdigit(c)){
		if(c=='-')t*=-1;
		c=getchar();
	}
	while(isdigit(c)){
		s=(s<<3)+(s<<1)+c-48;
		c=getchar();
	}
	return s*t;
}

void write(int x){
	if(x<0)x*=-1;
	if(x>9)write(x/10);
	putchar('0'+x%10);
}

int l[N], r[N];
int ans[N];


void work() {
    int n, k;

    int minn = INF;
    n = read(), k = read();
    int vis[N];
    

    for (int i=1; i<=n; ++i) {
        l[i] = read(), r[i] = read();
        minn = min(minn, r[i]);
    }

    if (k > minn) {
        printf("No\n");
        return ;
    }

    // 枚举最大公约数
    for (int i=k; i<=minn; ++i) {

        int flag = 1;
        // 枚举每个锁圈
        for (int j=1; j<=n; ++j) {

            int flag1 = 0;
            int tmp = ceil(l[j]*1.0/i) * i;
            while (tmp <= r[j]) {
                if (tmp<=r[j] && tmp>=l[j]) {
                    ans[j] = tmp;
                    flag1 = 1;
                    break;
                }
                tmp += i;
            }
            if (flag1 == 0) {
                flag = 0;
                break;
            }

        }
        if (flag == 0) continue;
        if (flag == 1) {
            printf("Yes\n");
            for (int i=1; i<=n; ++i) {
                write(ans[i]);
                printf(" ");
            }
            printf("\n");
            return ;
        }

    }

    printf("No\n");


}


signed main () {
    int t;
    t = read();

    while (t--) {
        work();
    }




    return 0;
}

想不到怎么优化 一直就TLE最后一个点 很搞啊啊啊

2024/11/23 18:54
加载中...