欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

布达佩斯40天天气预报,10月克罗地亚天气情况

墨初 知识笔记 260阅读

输入n篇文章和m个请求n<100m≤50000每个请求都是以下4种格式之一。
A查找包含关键字A的文章。
A AND B查找同时包含关键字A和B的文章。
A OR B查找包含关键字A或B的文章。
NOT A查找不包含关键字A的文章。
处理询问时需要对于每篇文章输出证据。前3种询问输出所有至少包含一个关键字的行第4种询问输出整篇文章。关键字只由小写字母组成查找时忽略大小写。每行不超过80个字符一共不超过1500行。

样例
输入

/span>/span>code>4A manufacturer, importer, or seller ofdigital media devices may not (1) sell,or offer for sale, in interstate commerce,or (2) cause to be transported in, or in amanner affecting, interstate commerce,a digital media device unless the deviceincludes and utilizes standard securitytechnologies that adhere to the securitysystem standards.**********Of course, Lisa did not necessarilyintend to read his books. She mightwant the computer only to write hermidterm. But Dan knew she came froma middle-class family and could hardlyafford the tuition, let alone her readingfees. Books might be the only way shecould graduate**********Research in analysis (i.e., the evaluationof the strengths and weaknesses ofcomputer system) is essential to thedevelopment of effective security, bothfor works protected by copyright lawand for information in general. Suchresearch can progress only through theopen publication and exchange ofcomplete scientific results**********I am very very very happy!What about you?**********6computerbooks AND computerbooks OR protectedNOT securityveryslick/span>/span>/pre> /span>/span/span>/p> /span>/span>code>want the computer only to write her----------computer system) is essential to theintend to read his books. She mightwant the computer only to write herfees. Books might be the only way sheintend to read his books. She mightfees. Books might be the only way she----------for works protected by copyright lawOf course, Lisa did not necessarilyintend to read his books. She mightwant the computer only to write hermidterm. But Dan knew she came froma middle-class family and could hardlyafford the tuition, let alone her readingfees. Books might be the only way shecould graduate----------I am very very very happy!What about you?I am very very very happy!not found/span>/span>/pre> /span/p> /span>/span>code class="prism language-rust">use std::{ collections::{BTreeMap, BTreeSet, HashMap}, io,};#[derive(PartialEq)]enum /span> { AND, OR, None, NOT,}fn get_words(s: &String) -> Vec<String> { let w: String s .chars() .map(|x| { if x.is_alphabetic() { x.to_ascii_lowercase() } else { } }) .collect(); let wds: Vec<String> w.split_whitespace().map(|x| x.to_string()).collect(); wds}fn main() { let mut buf String::new(); io::stdin().read_line(&mut buf).unwrap(); let n: usize buf.trim().parse().unwrap(); let mut articles: Vec<Vec<String>> vec![];//每篇文章的所有行 let mut words: Vec<HashMap<String, BTreeSet<usize>>> vec![];//每篇文章的所有单词和单词所在的行号 for _i in 0..n { let mut article: Vec<String> vec![]; let mut wd: HashMap<String, BTreeSet<usize>> HashMap::new(); loop { let mut buf String::new(); io::stdin().read_line(&mut buf).unwrap(); if buf.trim() *.repeat(10) { break; } article.push(buf.trim().to_string()); //count words let v: Vec<String> get_words(&buf); let line_idx article.len() - 1; for w in v.iter() { wd.entry(w.to_string()) .and_modify(|x| { x.insert(line_idx); }) .or_insert(BTreeSet::from([line_idx])); } } articles.push(article); words.push(wd); } let mut buf String::new(); io::stdin().read_line(&mut buf).unwrap(); let m: usize buf.trim().parse().unwrap(); let mut cmds vec![]; for _i in 0..m { let mut buf String::new(); io::stdin().read_line(&mut buf).unwrap(); cmds.push(buf.trim().to_string()); } for cmd in cmds.iter() { if let Some(idx) cmd.find(OR) { let word1 cmd[0..idx - 1].to_string(); let word2 cmd[idx 3..].to_string(); find_word(&articles, &words, &word1, &word2, /span>::OR); } else if let Some(idx) cmd.find(AND) { let word1 cmd[0..idx - 1].to_string(); let word2 cmd[idx 4..].to_string(); find_word(&articles, &words, &word1, &word2, /span>::AND); } else if let Some(idx) cmd.find(NOT) { let word1 cmd[idx 4..].to_string(); find_word(&articles, &words, &word1, &.to_string(), /span>::NOT); } else { let word1 cmd; find_word(&articles, &words, word1, &.to_string(), /span>::None); } println!({}, .repeat(10)); }}fn print_result(find_result: BTreeMap<usize, BTreeSet<usize>>, articles: &Vec<Vec<String>>) { if find_result.is_empty() { println!(not found); } else { let mut cnt 0; for (k, v) in find_result.iter() { for i in v.iter() { println!({}, articles[*k][*i]); } cnt 1; if cnt ! find_result.len() { println!({}, -.repeat(10)); } } }}fn find_word( articles: &Vec<Vec<String>>, words: &Vec<HashMap<String, BTreeSet<usize>>>, word1: &String, word2: &String, op: /span>,) { let mut find_result: BTreeMap<usize, BTreeSet<usize>> BTreeMap::new(); for (aidx, lines) in articles.iter().enumerate() { let mut find_line_idx: BTreeSet<usize> BTreeSet::new(); let ws words.get(aidx).unwrap(); if op /span>::OR { if ws.contains_key(word1) || ws.contains_key(word2) { if let Some(idx) ws.get(word1) { find_line_idx.append(&mut idx.clone()); } if let Some(idx) ws.get(word2) { find_line_idx.append(&mut idx.clone()); } find_result.insert(aidx, find_line_idx); } } else if op /span>::AND { if ws.contains_key(word1) && ws.contains_key(word2) { let idx ws.get(word1).unwrap(); find_line_idx.append(&mut idx.clone()); let idx ws.get(word2).unwrap(); find_line_idx.append(&mut idx.clone()); find_result.insert(aidx, find_line_idx); } } else if op /span>::None { if ws.contains_key(word1) { let idx ws.get(word1).unwrap(); find_line_idx.append(&mut idx.clone()); find_result.insert(aidx, find_line_idx); } } else if op /span>::NOT { if !ws.contains_key(word1) { find_line_idx.append(&mut (0..lines.len()).collect()); find_result.insert(aidx, find_line_idx); } } } print_result(find_result, &articles);}/span>/span>/pre>

标签:
声明:无特别说明,转载请标明本文来源!