CSES - Datatähti 2023 alku - Results
Submission details
Task:Kertoma
Sender:ToVoid
Submission time:2022-11-06 22:55:12 +0200
Language:Rust
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5--1, 2, 3details
#6--1, 2, 3details
#7--2, 3details
#8--2, 3details
#9--2, 3details
#10--2, 3details
#11--3details
#12--3details
#13--3details
#14--3details
#15--3details
#16--3details

Code

use std::io::{BufRead, BufReader};

fn equals(nums: &[u32;10], has_nums: &Vec<u32>) -> bool {
    for i in 0..10 {
        if nums[i] != has_nums[i] {
            return false;
        }
    }
    true
}

const M: u32 = 1000000000;
const L: u32 = 9;

fn multiply(num: u32, x: &mut Vec<u32>) {
    *x = x.iter().map(|a| *a*num).collect::<Vec<_>>();
    for i in 0..(x.len() - 1) {
        x[i+1] += x[i]/M;
        x[i] = x[i]%M;
    }

    let mut last_i = x.len()-1;
    while x[last_i] >= M {
        x.push(x[last_i]/M);
        x[last_i] = x[last_i]%M;
        last_i += 1;
    }
}

fn update_nums(nums: &mut [u32;10], x: &Vec<u32>) {
    let mut pienempi;
    let mut isompi;
    for a in x {
        for i in 0..L {
            pienempi = 10_u32.pow(i);
            isompi = pienempi * 10;
            nums[(a%isompi/pienempi) as usize] += 1;
        }
    }

    nums[0] -= {
        let mut r = 0;
        for i in (0..L).rev() {
            pienempi = 10_u32.pow(i);
            isompi = pienempi * 10;
            if (x[x.len()-1]%isompi/pienempi) == 0 {
                r += 1;
            } else {
                break;
            }
        }
        r
    };
}

fn main() {
    let mut input = BufReader::new(std::io::stdin());
    let mut line = "".to_string();
    input.read_line(&mut line).unwrap();
    let split = line.split_whitespace();
    let has_nums: Vec<u32> = split.map(|s| s.parse().unwrap()).collect::<Vec<_>>();

    let mut x: Vec<u32> = vec![1];
    let mut nums: [u32; 10];

    let mut a: u32 = 0;

    for i in 2.. {
        multiply(i, &mut x);

        nums = [0; 10];
        update_nums(&mut nums, &x);

        if equals(&nums, &has_nums) {
            a = i;
            break;
        }
    }

    println!("{}",a);
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 1 0 0 0 0 0 0 0

correct output
2

user output
2

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 0 0 0 0 1 0 0 0

correct output
3

user output
3

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
0 0 1 0 1 0 0 0 0 0

correct output
4

user output
4

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
2 0 1 1 0 0 1 0 2 0

correct output
10

user output
10

Test 5

Group: 1, 2, 3

Verdict:

input
9 3 1 1 2 2 3 1 6 1

correct output
27

user output
(empty)

Test 6

Group: 1, 2, 3

Verdict:

input
10 4 3 4 3 2 2 4 3 7

correct output
36

user output
(empty)

Test 7

Group: 2, 3

Verdict:

input
71 53 36 30 25 29 42 24 34 29

correct output
199

user output
(empty)

Test 8

Group: 2, 3

Verdict:

input
71 33 46 38 27 45 36 21 35 35

correct output
205

user output
(empty)

Test 9

Group: 2, 3

Verdict:

input
93 38 35 26 43 54 38 25 41 34

correct output
222

user output
(empty)

Test 10

Group: 2, 3

Verdict:

input
100 33 33 45 36 43 38 54 56 36

correct output
242

user output
(empty)

Test 11

Group: 3

Verdict:

input
3419 1797 1845 1849 1879 1791 ...

correct output
5959

user output
(empty)

Test 12

Group: 3

Verdict:

input
4776 2695 2709 2781 2616 2753 ...

correct output
8391

user output
(empty)

Test 13

Group: 3

Verdict:

input
20097 12282 12229 12214 12406 ...

correct output
32001

user output
(empty)

Test 14

Group: 3

Verdict:

input
47934 29918 29878 29713 29984 ...

correct output
71718

user output
(empty)

Test 15

Group: 3

Verdict:

input
84691 54156 54277 54533 54296 ...

correct output
123123

user output
(empty)

Test 16

Group: 3

Verdict:

input
99098 63339 63878 64182 63904 ...

correct output
142663

user output
(empty)