Seeking Help with Reading Complex Inputs in Rust
Difference between en8 and en9, changed 5 character(s)
Hello Codeforces community,↵

I'm reaching out for help with a Rust programming issue that's been frustrating me for a while. As a beginner in Rust, I'm struggling to understand how to read complex inputs, especially when it comes to competitive programming.↵

I've been trying to learn Rust, but I'm finding it challenging to grasp the concept of input/output handling. I've watched YouTube tutorials, but they only cover basic examples like "Hello, World!" or reading simple integers , also i have tried exploring some of the udemy courses but they are teaching all the complex stuff but they are not telling how to read input . However, when it comes to more complex inputs, such as reading multiple test cases with varying input formats, I'm lost.↵

I've tried to convert my C++ code to Rust using AI-powered tools like Blackbox AI and ChatGPT, but the generated code doesn't work as expected. I've also used C++ to Rust converters, but the resulting code doesn't produce any output.↵

Here's my C++ code that I'm trying to convert to Rust:↵

<spoiler summary="c++ Code">↵
```c++↵
#include<bits/stdc++.h>↵

using namespace std;↵


void solve(){↵

    int n, p;↵

    cin >> n >> p;↵

    vector<pair<int,int>>vec(n);↵

    for(int i=0;i<n;i++){↵

        cin>>vec[i].second;↵

    }↵

    for(int i=0;i<n;i++){↵

        cin>>vec[i].first;↵

    }↵

    sort(vec.begin(),vec.end());↵

    int need=n-1;↵

    long long  ans=p;↵

    for(int i=0;i<n;i++){↵

        if(vec[i].first<=p){↵

            int t=min(need,vec[i].second);↵

            need-=t;↵

            ans+=(long long)t*vec[i].first;↵

        }↵

    }↵

    cout<<ans+(long long)need*p<<endl;↵

}↵


int main(){↵

    int t;↵

    cin >> t;↵

    while(t--){↵

        solve();↵

    }↵

} ↵
```↵
</spoiler>↵

 ↵

The AI-generated Rust code is:↵

<spoiler summary="rust Code">↵
```rust↵

use std::io::{self, BufRead};↵

use std::cmp::min;↵


fn solve() {↵

    let stdin = io::stdin();↵

    let mut input = stdin.lock().lines();↵

    ↵

    let first_line = input.next().unwrap().unwrap();↵

    let mut iter = first_line.split_whitespace();↵

    let n: usize = iter.next().unwrap().parse().unwrap();↵

    let p: i64 = iter.next().unwrap().parse().unwrap();↵

    ↵

    let mut vec: Vec<(i64, i64)> = Vec::with_capacity(n);↵

    ↵

    for _ in 0..n {↵

        let value: i64 = input.next().unwrap().unwrap().parse().unwrap();↵

        vec.push((0, value));↵

    }↵

    ↵

    for i in 0..n {↵

        let value: i64 = input.next().unwrap().unwrap().parse().unwrap();↵

        vec[i].0 = value;↵

    }↵

    ↵

    vec.sort();↵

    ↵

    let mut need = n as i64 - 1;↵

    let mut ans = p;↵

    ↵

    for i in 0..n {↵

        if vec[i].0 <= p {↵

            let t = min(need, vec[i].1);↵

            need -= t;↵

            ans += t * vec[i].0;↵

        }↵

    }↵

    ↵

    println!("{}", ans + need * p);↵

}↵


fn main() {↵

    let stdin = io::stdin();↵

    let input = stdin.lock().lines();↵

    let mut iter = input.map(|line| line.unwrap()).peekable();↵

    ↵

    let t: usize = iter.next().unwrap().parse().unwrap();↵

    ↵

    for _ in 0..t {↵

        solve();↵

    }↵

}↵
```↵
</spoiler>↵

 ↵

However, this code is giving me an "idleness limit" error, which I've never seen before in C++ or Java.↵

If someone could provide guidance on how to read complex inputs in Rust or share a working code for this problem without using templates, I would greatly appreciate it. I'm eager to learn and understand the underlying concepts, rather than just copying and pasting code.I don't want to use templates , first i want to write the raw code i don't care about writing some more line of code but i want to know everything from scratch also when i will become somewhat decent then i will write my own template i don't want to blindly follow some template and simply say that reading input and output is complicated in rust.↵

I've searched for Rust submissions for this problem (https://mirror.codeforces.com/contest/1876/problem/A), but out of nearly 7,000 submissions, I only found 6-7 in Rust, and they were all using templates for reading inputs.↵

Please help me overcome this hurdle, and I'll be grateful for any resources or explanations that can aid my learning journey in Rust.↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en9 English rizzgod_tourist 2024-07-25 19:09:33 5 (published)
en8 English rizzgod_tourist 2024-07-25 19:09:03 88
en7 English rizzgod_tourist 2024-07-25 19:06:02 95
en6 English rizzgod_tourist 2024-07-25 19:04:21 94
en5 English rizzgod_tourist 2024-07-25 19:02:34 5 Tiny change: 'n\n\n\n```\nuse std:' -> 'n\n\n\n``` Rust\nuse std:'
en4 English rizzgod_tourist 2024-07-25 19:01:47 14
en3 English rizzgod_tourist 2024-07-25 18:59:17 127 (saved to drafts)
en2 English rizzgod_tourist 2024-07-25 18:57:29 146
en1 English rizzgod_tourist 2024-07-25 18:45:40 4323 Initial revision (published)