首页 > 其他分享 >P7911 [CSP-J 2021] 网络连接 题解

P7911 [CSP-J 2021] 网络连接 题解

时间:2024-10-23 12:31:38浏览次数:1  
标签:return ad int 题解 P7911 else ++ ans CSP

模拟代码

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int n, p = 1, ans[1003]; // 没事干的ans数组

struct node{
	string op, ad;
}a[1003];

int ws(int n) { // 位数
	int sum = 0;
	if (n == 0) return 1;
	while (n) {
		n /= 10;
		sum++;
	}
	return sum;
}

bool check(string ad) {
	int c1 = 0, c2 = 0;
	for (int i = 0; i < ad.size(); i++) { // 统计 . 和 : 的数量
		if (ad[i] == '.') c1++;
		if (ad[i] == ':') c2++;
	}
	if (c1 != 3 || c2 != 1) return 0;
	c1 = 0, c2 = 0;
	for (int i = 0; i < ad.size(); i++) { // 检查顺序
		if (ad[i] >= '0' && ad[i] <= '9') continue;
		if (ad[i] == '.') c1++;
		if (c1 == 3 && c2 == 0) break; // 当点有 3 个时,冒号肯定还有 1 个,为了避免后面判断错误,所以直接跳出循环
		if ((c1 == 1 || c1 == 2 || c1 == 3) && c2 >= 1) return 0;
	}
	long long num = 0, nump = 1, st = -1, po = 0, cz = 0;
	for (int i = 0; i < ad.size(); i++) {
		if (ad[i] >= '0' && ad[i] <= '9') { // 数字
			num = num * 10 + (ad[i] - '0');
			if (!po) { // 记录起点
				st = i;
				po = 1;	
			}
			cz = 1;
		}	
		else if (nump >= 1 && nump <= 4) {
			if (!cz) return 0;
			if (ws(num) != i - st) return 0; // 位数不符合要求
			if (!(num >= 0 && num <= 255)) return 0;
			num = 0;
			nump++;
			po = 0;
		}
	}
	if (nump != 5) return 0;
	if (ws(num) != ad.size() - st) return 0;
	if (!(num >= 0 && num <= 65535)) return 0; 
	return 1;
}

bool have_server(int n) {
	for (int i = 1; i < n; i++) {
		if (a[i].op == "Server" && a[i].ad == a[n].ad) 
			return 1;
	}
	return 0;
}

int find_server(string ad, int n) {
	for (int i = 1; i < n; i++)
		if (a[i].op == "Server" && a[i].ad == ad) return i;
	return 0;
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		cin >> a[i].op >> a[i].ad;
		if (check(a[i].ad)) {
			if (a[i].op == "Server") {
				if (!have_server(i)) ans[i] = -1;
				else ans[i] = -2;
			}
			if (a[i].op == "Client") {
				int s = find_server(a[i].ad, i);
				if (s) ans[i] = s;
				else ans[i] = -2;
			}
		}
		else ans[i] = -3;
	}
	for (int i = 1; i <= n; i++) {
		if (ans[i] > 0) printf("%d\n", ans[i]);
		else if (ans[i] == -1) printf("OK\n");
		else if (ans[i] == -2) printf("FAIL\n");
		else if (ans[i] == -3) printf("ERR\n");
	}
	return 0;
} 

标签:return,ad,int,题解,P7911,else,++,ans,CSP
From: https://www.cnblogs.com/panda-lyl/p/18496122

相关文章

  • P8816 [CSP-J 2022] 上升点列 题解
    最长上升子序列根据题目中,每个坐标的横纵坐标均单调递增,所以明显可以使用最长上升子序列.定义状态$f_{i,p}$,表示正在节点$i$时,还剩下$p$次插入机会,所能达到的最大长度.定义变量$dis=|x_i-x_j|+|y_i-y_j|-1.$,表示$i$到$j$节点至少要插$dis$个节点.为什么要$-1$......
  • ARC165F题解
    前言\(2024.10.19\)日校测\(T4\),思维太庙,被薄纱了,遂哭弱,写题解以记之。简要题意给你一个长度为\(2n\)的序列\(A,\foralla_i\in[1,n]\),其中\(1\)到\(n\)每个数都出现了两次,现在需要把相同的两个数排到一起,每次操作只能交换相邻两个数,在保证操作次数最小的情况下求出现......
  • P8814 [CSP-J 2022] 解密 题解
    解方程$题目中说,n=pq,ed=(p-1)(q-1)+1,m=n-ed+2.$$把ed的式子展开,得到:$$ed=p(q-1)-(q-1)+1$$ed=pq-p-q+2$$再把展开后的式子带入m中,得:$$m=n-(pq-p-q+2)+2.$$m=n-pq+p+q-2+2$$\becausen=pq$$\thereforem=pq-pq+p+q-2+2$$m=p+q.$$如果想要求出p和q的值,那么可以再......
  • P8815 [CSP-J 2022] 逻辑表达式 题解
    短路我们可以使用一个变量来记录当前有没有短路.设变量短路为$dl$.当$dl$为$0$时,说明当前值为$0$,且运算符为&.当$dl$为$1$时,说明当前值为$1$,且运算符为|.代码重点讲完了,细节可以看代码以及注释.#include<iostream>#include<cstdio>#include<cstring>using......
  • Day12 备战CCF-CSP练习
    Day12题目描述西西艾弗岛上共有\(n\)个仓库,依次编号为\(1∼n\)。每个仓库均有一个\(m\)维向量的位置编码,用来表示仓库间的物流运转关系。具体来说,每个仓库\(i\)均可能有一个上级仓库\(j\),满足:仓库\(j\)位置编码的每一维均大于仓库\(i\)位置编码的对应元素。比如......
  • 最佳序列 题解
    最佳序列题解题目描述你得到了一个\(N\)个非负整数组成的序列\(A\)。我们称由序列\(A\)的连续若干项组成的新序列为\(A\)的一个连续子序列。给出两个正整数\(L,R(L\leR)\)。称\(A\)的每一个长度不小于\(L\)且不大于\(R\)的连续子序列为一个纯洁序列,定义纯洁度......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......
  • 20241022 校测T1 链链链(chain)题解
    Problem链链链chain你有一个长度为\(n\)的链,编号为\(i(1≤i<n)\)的边连接着结点\(i\)与\(i+1\)。每个结点\(i\)上有一个整数\(a_i\)。你需要做以下操作\(n−1\)次:•选择一条还未被断开的边,设其连接了点\(i\)与\(i+1\),将其断开。•断边后,对于所......
  • 准备CSP 复赛
    用来方便自己复习版本C++14目录快读和快输注意事项缺省源快读和快输链接:浅谈C++IO优化——读优输优方法集锦最全快读、快写模板「持续更新」-凌云_void-博客园读入、输出优化-OIWiki打的时候一定要注意运算符优先级QWQ(有时候真的很难发现)错误示例:int......
  • P9751 [CSP-J 2023] 旅游巴士 题解
    思路首先,举一个例子,假如说小Z到了入口,但是没到时间,所以没法进去,该怎么办?当然是等$k$个时间单位呀.除此之外,像到了其他景区,但是还没开门怎么办?继续等$k$的非负整数倍时间呀.知道这个后,我们先定义状态$f_{i,j}$,表示到达点$i$时,路径长度(即时间)$mod$$k$的最早时......