社区讨论

TLE 求助

P11312神奇的小江鸟参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m3u8a52r
此快照首次捕获于
2024/11/23 21:50
去年
此快照最后确认于
2025/11/04 14:04
4 个月前
查看原帖
TLE了最后一个点
CPP
#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;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...