P9393 紫丁香

Posted ~nebula~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P9393 紫丁香相关的知识,希望对你有一定的参考价值。

_

膜拜 yxcat
考虑二分答案,将问题转换成验证 \\(A\\) 是否由 \\(S\\) 通过若干次操作生成
将操作效果反向,即存在一个操作 \\(x\\),满足 \\(A_i=1\\)\\(x_i=1\\),那么将 \\(A_i\\) 处的 \\(1\\) 消掉,
也就是对于一个串 \\(A\\),如果 \\(A\\) 尽量消 \\(1\\) 之后剩下的消不掉的 \\(1\\) 正好在 \\(S\\) 串中该位置也是 \\(1\\),那么 \\(A\\) 合法
\\(f[s]\\) 表示 \\(s\\) 通过若干次操作剩下消不掉的 \\(1\\) 的并
\\(g[s]\\) 表示由 \\(s\\) 通过若干次操作可以删去的 \\(1\\) 的并
有转移 \\(f[s]=f[s\\space xor\\space g[s]]\\)
\\(g[s]\\) 作高维后缀或
对于最终答案 \\(A\\) 按位贪心
如果该位可以取 \\(1\\),原答案也就是加上这一位上的 \\(1\\) 后,消不掉的 \\(1\\) 仍全出现在 \\(S\\) 里,那么该位就保留 \\(1\\)

c++20 协程 图片识别框架 紫丁香

2021-6-6 今天改成了c++ 20 协程
具体修改:改成c++ 20 协程 删除boost库

c++ 2019协程

在vs2019 里面 加上/await
vs2019 里加上命令

gcc10 版本

gcc10 版本以上 需要fcoroution 支持
代码已经上传

c++ 20 协程方式 websocket server
websocket server

增加websocket html 测试 [2021-6-6]

在代码目录下 testwebsocket.html

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>websocket 测试</title>

    <script type="text/javascript">
         function WebSocketTest()
         {
            if ("WebSocket" in window)
            {
               console.log("!");

               // 打开一个 web socket
               var ws = new WebSocket("ws://127.0.0.1:6001/echo");

               ws.onopen = function()
               {
                  // Web Socket 已连接上,使用 send() 方法发送数据
                  ws.send("data here");
               };

               ws.onmessage = function (evt)
               {
                   var received_msg = evt.data;
                   console.log(received_msg);
               };

               ws.onclose = function()
               {
                  // 关闭 websocket
                  alert("连接已关闭...");
               };
            }

            else
            {
               console.log("不支持 WebSocket!");
            }
         }
    </script>

</head>
<body>

    <div id="sse">
        <a href="javascript:WebSocketTest()">运行 WebSocket</a>
    </div>

</body>
</html>

目的

从web上传图片和视频,httpserver后台接收,进行图片识别并返回
使用框架
1 asio
2 websocketpp
3 websock 【紫丁香研发】
4 opencv
5 调用python

httpserver和websocket server

第一版使用的httpserver 和 websocket server 是由websocketpp制作的

路由

比如nodejs 的 express 或 koi
比如go 语言的iris 等等那种路由方式很理想
这里模仿这种方式,使用c++11 的lamba

void registerhttp()
{
	broadcast_server& _httpserver = _hserver;
	_httpserver.func_proc_register("/login", [](maps_pair& rp) {
		
		auto iter = rp.begin();
		while (iter != rp.end())
		{
			std::cout << iter->first << " " << iter->second << std::endl;
		}
		return;
	});

	_httpserver.func_proc_register("/url", [](maps_pair& rp) {
		cout << "url get" << endl;
		return;
	});

}

int main(int argc, char** argv)
{
	registerhttp();
	_hserver.Start(80);
	_hserver.Join();
	return 0;
}

实现

bool func_proc_register(std::string uri, handler_2http f) {

		auto it = v_map_function.find(uri);
		if (v_map_function.end() != it)
			return false;
		route_request rr;
		rr.func = f;
		return v_map_function.emplace(uri, rr).second;
	}

实际上,在类内部插入了一个回调函数vmap,在用户浏览上输入后,后台从url地址中获取所有参数,并进行比对。

void on_http(websocketpp::connection_hdl hdl)
	{
		try
		{
			c_server::connection_ptr con = m_server.get_con_from_hdl(hdl);
			websocketpp::http::parser::request rt = con->get_request();

			const string& strUri = rt.get_uri();
			const string& strMethod = rt.get_method();
			const string& strBody = rt.get_body();	//只针对post时有数据
			const string& strHost = rt.get_header("host");
			const string& strVersion = rt.get_version();
			//std::cout << "接收到一个" << strMethod.c_str() << "请求:" << strUri.c_str() << "  线程ID=" << ::GetCurrentThreadId() << "  host = " << strHost << std::endl;
			if (strMethod.compare("POST") == 0)
			{//对于post提交的,直接返回跳转
				con->set_status(websocketpp::http::status_code::value(websocketpp::http::status_code::found));
				con->append_header("location", "http://localhost");
			}
			else if (strMethod.compare("GET") == 0)
			{
				if (strUri.compare("/") == 0)
				{//请求主页
					con->set_body("Hello We Meeting Here! Please use more route");
					con->set_status(websocketpp::http::status_code::value(websocketpp::http::status_code::ok));
				}
				else if (strUri.compare("/favicon.ico") == 0)
				{//请求网站图标,读取图标文件,直接返回二进制数据

					con->set_body("");
					//con->append_header("Content-Type", "image/x-icon");
					con->set_status(websocketpp::http::status_code::value(websocketpp::http::status_code::ok));
				}
				else if (strUri.compare("/test1") == 0)
				{
					con->set_body("test1 come here");
					con->set_status(websocketpp::http::status_code::value(
						websocketpp::http::status_code::ok));
				}
				else
				{//其他未定义的页面,返回跳转
					cout <<"uri:"<<strUri << endl;
					con->append_header("Access-Control-Allow-Origin", "*");
					con->append_header("Access-Control-Allow-Methods", "GET,POST");
					con->append_header("Access-Control-Allow-Headers", "x-requested-with,content-type");
					std::map<string, string> list;	//操作参数列表	
					string url;//路由参数
					GetReqeustAndParmeter(strUri, url, list);
					cout << "url is:" << url << endl;
					auto iter = v_map_function.find(url);
					if (iter == v_map_function.end())
					{
						string reply = "{\\"ret\\":-1,\\"info\\":\\"no this parameter\\"}";
						con->set_body(reply.c_str());
						con->set_status(websocketpp::http::status_code::value(websocketpp::http::status_code::ok));
						return;
					}
					else {
						route_request& rr = iter->second;
						if (rr.func != nullptr)
						{
							rr.func(list);
						}
						con->set_body(rr.retString.c_str());
						//con->set_body("{\\"ret\\":0}");
						con->set_status(websocketpp::http::status_code::value(websocketpp::http::status_code::ok));
					}
				}
			}
		}
		catch (websocketpp::exception const& e)
		{
			std::cout << "exception: " << e.what() << std::endl;
		}
		catch (std::exception& e)
		{
			std::cout << "exception: " << e.what() << std::endl;
		}
		catch (...)
		{

		}
	}	

适用系统

1 windows
vs2019
2 linux
编译cmake

全部代码:

紫丁香地址
在gitee 上。每个星期更新

以上是关于P9393 紫丁香的主要内容,如果未能解决你的问题,请参考以下文章

智能车竞赛技术报告 | 智能视觉组 -哈尔滨工业大学 - 紫丁香七队

智能车竞赛技术报告 | 双车接力组 -哈尔滨工业大学 - 紫丁香六队

智能车竞赛技术报告 | 单车拉力组 - 哈尔滨工业大学 - 紫丁香

智能车竞赛技术报告 | 节能信标组-哈尔滨工业大学紫丁香五队

智能车竞赛技术报告 | 电磁越野组 - 哈尔滨工业大学 - 紫丁香三队

智能车竞赛技术报告 | 全向行进组 - 哈尔滨工业大学 - 紫丁香四队