timus 1003. Parity

本文介绍了一种解决01数列查询问题的算法,利用Hash表和并查集实现高效查询区间内0的数量的奇偶性。通过线性探测解决冲突,并采用按秩合并优化并查集操作。
大体意思: 一个人先写一个01的数列,另一个人不停的问a,b之间的偶数是奇还是偶,
问另一个人的回答到第几步时有可能一直为对的? 
题目的解题思路:
(1) 因为数据范围远大于查询次数,所以,可以采取开放式寻址法中中的线性探查来Hash.
(1) 设N(a)为序列中[1,a]之间的1的个数, N(a,b)为奇说明,N(a-1)与N(b)的奇偶性为异. 思路为并查集,
	即如果探得N(a-1)与N(b)为异,则将a-1与b+10000取UNION操作,而a-1+10000与b取UNION操作.
	即保持i与i+10000异奇偶.
 
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace test7_2 { public partial class frmVoltmeter : Form { public frmVoltmeter() { InitializeComponent(); } private void frmVoltmeter_Load(object sender, EventArgs e) { for (int i = 1; i <= 20; i++) { cboxCOM.Items.Add("COM" + i); } cboxCOM.Text = "COM1"; cboxBaudRate.Items.Add("4800"); cboxBaudRate.Items.Add("9600"); cboxBaudRate.Items.Add("19200"); cboxBaudRate.Items.Add("115200"); cboxBaudRate.Text = "9600"; cboxParity.Items.Add("None"); cboxParity.Items.Add("Even"); cboxParity.Items.Add("Odd"); cboxParity.Text = "None"; cboxDataBits.Items.Add("8"); cboxDataBits.Items.Add("9"); cboxDataBits.Text = "8"; cboxStopBits.Items.Add("1位"); cboxStopBits.Items.Add("1.5位"); cboxStopBits.Items.Add("2位"); cboxStopBits.Text = ("1位"); gboxReceive.Enabled = false; } private void btnCOM_Click(object sender, EventArgs e) { try { if (btnCOM.Text == "打开串口") { spData.PortName = cboxCOM.Text;//获取串口号 spData.BaudRate = int.Parse(cboxBaudRate.Text); spData.DataBits = int.Parse(cboxDataBits.Text); switch (cboxParity.Text) { case "None": spData.Parity = System.IO.Ports.Parity.None; break; case "Even": spData.Parity = System.IO.Ports.Parity.Even; break; case "Odd": spData.Parity = System.IO.Ports.Parity.Odd; break; default: break; } switch (cboxStopBits.Text) { case "1位": spData.StopBits = System.IO.Ports.StopBits.One; break; case "1.5位": spData.StopBits = System.IO.Ports.StopBits.OnePointFive; break; case "2位": spData.StopBits = System.IO.Ports.StopBits.Two; break; default: break; } spData.Open(); btnCOM.Text = "关闭串口"; gboxReceive.Enabled = true; } else { spData.Close(); btnCOM.Text = "打开串口"; gboxReceive.Enabled = false; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void txtReceive_TextChanged(object sender, EventArgs e) { } private void txtVol_TextChanged(object sender, EventArgs e) { } private void labVol_Click(object sender, EventArgs e) { } private void spData_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { txtReceive.Text = spData.ReadExisting(); } catch (Exception ex) { // 异常处理代码 Console.WriteLine("An error occurred while attempting to open the serial port: " + ex.Message); } } } }这个程序能接受串口通信吗,如果不能怎么修改
05-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值