握手会C++

目录

Description

Format

输入数据

输出数据

样例输入 #2

样例输出 #2

数据规模与约定

分析

代码


Description

一个R×S 的方格,每个人坐在一个方格中,可能存在空位。

每个人都会与自己周围的八个方格中的人握手(可能不满 8 人)。

小J 是最晚到场的,他按照如下的方式就坐:

  • 若有空位,他会坐在一个能使他能与最多的人握手的空位上。
  • 若没有空位,他会离开。

求出 小J 就坐后人们的握手次数。

Format

第一行两个整数R,S。

接下来一个R行S列的字符矩阵,描述就坐情况:

  • . 表示空位。
  • o 表示有人入座。

仅一行一个整数,即小J就坐后人们的握手次数。

输入数据

2 3 
..o 
o..

输出数据

2

样例输入 #2

2 2 
oo 
oo

样例输出 #2

6

数据规模与约定

  • 对于 20% 的数据,有 R=1。
  • 对于另外 20% 的数据,有 R=2。
  • 对于另外 20% 的数据,座位坐满了。
  • 对于100% 的数据,有 1<= R,S<=50

分析

首先,根据题目中的“每个人都会与自己周围的八个方格中的人握手”,可以得出,每当一个新的人入座,他就会与周围每一个人握手,那么就意味着它周围八个位置(如果有的话)的握手次数都要加一(注意,是位置,不是人)。

那么,我们可以依次读入每一个数,每读入一个位置,就令它周围每一个位置的握手次数加一。

输入完毕后,我们再来扫一遍,用ans统计握手次数,用maxx统计小J握手次数,l统计当前除小J外的人数,那么明显有:如果当前位置上有人,则ans+=k[i][j]同时l++,否则,maxx=max(maxx,k[i][j]);最后,因为我们统计的是每个人的握手次数,所以ans/=2。

最后, ans+=maxx(if \ l!=r*s)就行啦。

代码


#include<bits/stdc++.h>
using namespace std;
template <typename _Tp> inline void read(_Tp&x)
{
	char ch;
	bool flag=0;
	x=0;
	while(ch=getchar(),!isdigit(ch)) if(ch=='-')flag=1;
	while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
	if(flag) x=-x;
}
inline void print(int x)
{
	if(x<0)
	{
		x=-x;
		putchar('-');
	}
	if(x>9)
		print(x/10);
	putchar(x%10+'0');
}
//快读快写,不必在意^-^
int r,s,l,p,maxx,ans;
char in;
bool g[100][100];
int k[100][100];
int main()
{
	read(r);
	read(s);
	for(int i=1;i<=r;i++)
		for(int j=1;j<=s;j++)
		{
			cin>>in;
			if(in=='o')
			{
				l++;
				g[i][j]=true;
				k[i][j-1]++;
				k[i][j+1]++;
				k[i-1][j]++;
				k[i-1][j-1]++;
				k[i-1][j+1]++;
				k[i+1][j]++;
				k[i+1][j+1]++;
				k[i+1][j-1]++;
			}
		}
	for(int i=1;i<=r;i++)
		for(int j=1;j<=s;j++)
		{
			if(g[i][j])
				ans+=k[i][j];
			else
				maxx=max(k[i][j],maxx);
		}
	ans/=2;
	if(r*s!=l)
		ans+=maxx;
	print(ans);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现向某个 Websocket 通信进行握手,需要使用 C++ 编写一个 Websocket 客户端程序,以下是一个简单的实现方式: 1. 创建一个 TCP 客户端,连接指定的 Websocket 服务器; 2. 发送握手请求给服务器; 3. 接收服务器返回的握手响应; 4. 握手成功后,客户端可以向服务器发送消息,并接收服务器发送的消息。 下面是一个简单的 C++ Websocket 客户端实现代码: ```c++ #include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> using namespace std; #define SERVER_ADDR "127.0.0.1" #define SERVER_PORT 8888 #define BUF_SIZE 1024 string getWebSocketKey(string data) { string key = ""; string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; data += guid; unsigned char hash[20]; SHA1((const unsigned char*)data.c_str(), data.length(), hash); key = base64_encode(hash, 20); return key; } void sendHandshake(int sockfd) { string request = "GET / HTTP/1.1\r\n" "Host: " + string(SERVER_ADDR) + ":" + to_string(SERVER_PORT) + "\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n" "Sec-WebSocket-Version: 13\r\n\r\n"; send(sockfd, request.c_str(), request.length(), 0); } int main() { int sockfd; struct sockaddr_in serv_addr; char buffer[BUF_SIZE]; int n; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { cout << "ERROR opening socket" << endl; return 1; } bzero((char*) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR); serv_addr.sin_port = htons(SERVER_PORT); if (connect(sockfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0) { cout << "ERROR connecting" << endl; return 1; } sendHandshake(sockfd); bzero(buffer, BUF_SIZE); n = read(sockfd, buffer, BUF_SIZE - 1); if (n < 0) { cout << "ERROR reading from socket" << endl; return 1; } string data(buffer); cout << "Received message: " << data << endl; close(sockfd); return 0; } ``` 这个程序实现了一个简单的 Websocket 客户端,它可以连接指定的 Websocket 服务器,并发送握手请求,然后接收服务器返回的握手响应,并输出到控制台上。请注意,这个程序仅仅是一个示例程序,实际运行时还需要根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值