cyaron icon indicating copy to clipboard operation
cyaron copied to clipboard

Vector.random在生成n很大的数组时,生成的数量不够

Open GEJXD opened this issue 2 years ago • 2 comments

我写了一个这样的数据生成器:

from cyaron import *

test_data = IO(file_prefix="small", data_id=1)

n = randint(1, 4000)
test_data.input_writeln(n)

a = Vector.random(n, [(0, 1000)])
test_data.input_writeln(a)      
    
b = Vector.random(n, [(0, 1000)])
test_data.input_writeln(b)    
    
k = randint(1, 1000000)
test_data.input_writeln(k)

test_data.output_gen("./std")

然后把生成出来的数据文件用main.cpp(不是std)读取:

#include<bits/stdc++.h>

using i64 = long long;

void solve(){
	int n;
	std::cin >> n;
	std::cout << "n = " << n << '\n';

	i64 suma = 0;
	std::vector<int> a(n + 1);
	for (int i = 1;i <= n;i ++) {
		std::cin >> a[i];
		suma += a[i];
	}
	std::cout << "A: " << '\n';
	for (int i = 1;i <= n;i ++) {
		std::cout << a[i] << " \n"[i == n];
	}

	i64 sumb = 0;
	std::vector<int> b(n + 1);
	for (int i = 1;i <= n;i ++) {
		std::cin >> b[i];
		sumb += b[i];
	}
	std::cout << "B: " << '\n';
	for (int i = 1;i <= n;i ++) {
		std::cout << b[i] << " \n"[i == n];
	}

    int k;
    std::cin >> k;
	std::cout << "k = " << k << '\n';
}

int main(){
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);

    int tt = 1;
    //cin >> tt;
    while(tt --) solve();

    fclose(stdin);
    fclose(stdout);
    return 0;
}

但是他的输出是这个样子的: image

其中的最后一个数字非0数字98223刚好是用cyaron生成的k值,所以我推测是Vector.random生成的数字数量不够,导致文件读入到了EOF,于是后面的数据都读成了0。 image

经过测试,n < 1000的规模生成的vector是没问题的,在大于1000左右的时候就会出现这种情况

GEJXD avatar Oct 13 '23 11:10 GEJXD

是的, 这个vector有问题。

prayerhgq avatar Nov 05 '23 14:11 prayerhgq

see: https://github.com/luogu-dev/cyaron/issues/109

Mr-Python-in-China avatar Feb 26 '24 01:02 Mr-Python-in-China