首页 > 其他分享 >9.25

9.25

时间:2024-09-25 20:01:43浏览次数:1  
标签:return 9.25 int 地址 && 符合规范 连接

2021 csp-j
T1

[CSP-J 2021]分糖果

题目描述

红太阳幼儿园有n个小朋友,你是其中之一。保证n>=2。

有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。

由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿R块糖回去。

但是拿的太少不够分的,所以你至少要拿L块糖回去。保证 n <= L<=R。

也就是说,如果你拿了k块糖,那么你需要保证L <= k <= R。

如果你拿了k块糖,你将把这k块糖放到篮子里,并要求大家按照如下方案分糖果:只要篮子里有不少于n块糖果,幼儿园的所有n个小朋友(包括你自己)都从篮子中拿走恰好一块糖,直到篮子里的糖数量少于n块。此时篮子里剩余的糖果均归你所有——这些糖果是作为你搬糖果的奖励。

作为幼儿园高质量小朋友,你希望让作为你搬糖果的奖励的糖果数量(而不是你最后获得的总糖果数量!)尽可能多;因此你需要写一个程序,依次输入n, L, R,并输出你最多能获得多少作为你搬糖果的奖励的糖果数量。

输入格式

输入一行,包含三个正整数n, L, R,分别表示小朋友的个数、糖果数量的下界和上界。

输出格式

输出一行一个整数,表示你最多能获得的作为你搬糖果的奖励的糖果数量。

include <bits/stdc++.h>

using namespace std;

define int long long

int n,l,r;

signed main()
{
cin>>n>>l>>r;
if(n == l && l == r) cout<<0<<"\n";
else if(l + n - 1 <= r) cout<<n-1<<"\n";
else
{
int t1 = l % n;
int t2 = r % n;
if(t1 > t2) cout<<n-1<<"\n";
else cout<<t2<<"\n";
}

return 0;

}

T2

[CSP-J 2021] 插入排序

题目描述

插入排序是一种非常常见且简单的排序算法。小Z是一名大一的新生,今天H老师刚刚在上课的时候讲了插入排序算法。

假设比较两个元素的时间为O(1),则插入排序可以以O(n^2)的时间复杂度完成长度为n的数组的排序。不妨假设这n个数字分别存储在a_1,a_2,……,a_n之中,则如下伪代码给出了插入排序算法的一种最简单的实现方式:

这下面是C/C++的示范代码:

for(inti=1;i<=n;i++)
	for(intj=i;j>=2;j--)
		if(a[j]<a[j-1]){
			intt=a[j-1];
			a[j-1]=a[j];
			a[j]=t;
		}

这下面是Pascal的示范代码:

fori:=1tondo
	forj:=idownto2do
		ifa[j]<a[j-1]then
			begin
				t:=a[i];
				a[i]:=a[j];
				a[j]:=t;
			end;

为了帮助小Z更好的理解插入排序,小Z的老师H老师留下了这么一道家庭作业:

H老师给了一个长度为n的数组a,数组下标从1开始,并且数组中的所有元素均为非负整数。小Z需要支持在数组a上的Q次操作,操作共两种,参数分别如下:

1xv:这是第一种操作,会将a的第x个元素,也就是a_x的值,修改为v。保证1<=x<=n,1<=v<=10^9。注意这种操作会改变数组的元素,修改得到的数组会被保留,也会影响后续的操作

2~x:这是第二种操作,假设H老师按照上面的伪代码对a数组进行排序,你需要告诉H老师原来a的第x个元素,也就是a_x,在排序后的新数组所处的位置。保证1\lex\len。注意这种操作不会改变数组的元素,排序后的数组不会被保留,也不会影响后续的操作

H老师不喜欢过多的修改,所以他保证类型1的操作次数不超过5000。

小Z没有学过计算机竞赛,因此小Z并不会做这道题。他找到了你来帮助他解决这个问题。

输入格式

第一行,包含两个正整数n,Q,表示数组长度和操作次数。

第二行,包含n个空格分隔的非负整数,其中第i个非负整数表示a_i。

接下来Q行,每行2 ~ 3个正整数,表示一次操作,操作格式见【题目描述】。

输出格式

对于每一次类型为2的询问,输出一行一个正整数表示答案。

include <bits/stdc++.h>

using namespace std;

const int N = 8005;
int n,q;
int sum[N],a[N];

signed main()
{

cin>>n>>q;
for(int i = 1;i <= n;i++)
	cin>>a[i];
for(int i = 1;i <= n;i++)
{
	sum[i] = 1;
	for(int j = 1;j <= n;j++)
	{
		if(j < i&&a[j]<= a[i]) sum[i]++;
		else if(j > i && a[j] < a[i]) sum[i]++; 
	}
}
for(int i = 1;i <= q;i++)
{
	int op,x,v;
	cin>>op>>x;
	if(op == 1)
	{
		cin>>v;
		sum[x] = 1;
		for(int i = 1;i <= n;i++)
		{
			if(i < x && a[i] > a[x]) sum[i]--;
			else if(i > x && a[i] >= a[x]) sum[i]--;
			if(i < x && a[i] > v) sum[i]++;
			else if(i > x && a[i] >= v) sum[i]++;
		}
		for(int i = 1;i <= n;i++)
		{
			if(i < x && a[i] <= v) sum[x]++;
			else if(i > x && a[i] < v) sum[x]++; 
		}
		a[x] = v;
	}
	else if(op == 2)
	{
		cout<<sum[x]<<"\n";
	}
}
return 0;

}

T3

[CSP-J 2021] 网络连接

题目描述

TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。

在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机负责建立连接,客户机负责加入连接。

需要进行网络连接的计算机共有 n 台,编号为 1 ~ n,这些机器将按编号递增的顺序,依次发起一条建立连接或加入连接的操作。

每台机器在尝试建立或加入连接时需要提供一个地址串。服务机提供的地址串表示它尝试建立连接的地址,客户机提供的地址串表示它尝试加入连接的地址。

一个符合规范的地址串应当具有以下特征:

  1. 必须形如 a.b.c.d:e 的格式,其中 a, b, c, d, e 均为非负整数;
  2. 0 <= a, b, c, d <= 255,0 <= e <= 65535;
  3. a, b, c, d, e 均不能含有多余的前导 0。

相应地,不符合规范的地址串可能具有以下特征:

  1. 不是形如 a.b.c.d:e 格式的字符串,例如含有多于 3 个字符 . 或多于 1 个字符 : 等情况;
  2. 整数 a, b, c, d, e 中某一个或多个超出上述范围;
  3. 整数 a, b, c, d, e 中某一个或多个含有多余的前导 0。

例如,地址串 192.168.0.255:80 是符合规范的,但 192.168.0.999:80、192.168.00.1:10、192.168.0.1:088、192:168:0:1.233 均是不符合规范的。

如果服务机或客户机在发起操作时提供的地址串不符合规范,这条操作将被直接忽略。

在本问题中,我们假定凡是符合上述规范的地址串均可参与正常的连接,你无需考虑每个地址串的实际意义。

由于网络阻塞等原因,不允许两台服务机使用相同的地址串,如果此类现象发生,后一台尝试建立连接的服务机将会无法成功建立连接;除此之外,凡是提供符合规范的地址串的服务机均可成功建立连接。

如果某台提供符合规范的地址的客户机在尝试加入连接时,与先前某台已经成功建立连接的服务机提供的地址串相同,这台客户机就可以成功加入连接,并称其连接到这台服务机;如果找不到这样的服务机,则认为这台客户机无法成功加入连接。

请注意,尽管不允许两台不同的服务机使用相同的地址串,但多台客户机使用同样的地址串,以及同一台服务机同时被多台客户机连接的情况是被允许的。

你的任务很简单:在给出每台计算机的类型以及地址串之后,判断这台计算机的连接情况。

输入格式

第一行,一个正整数 n。

接下来 n 行,每行两个字符串 op, ad,按照编号从小到大给出每台计算机的类型及地址串。

其中 op 保证为字符串 Server 或 Client 之一,ad 为一个长度不超过 25 的,仅由数字、字符 . 和字符 : 组成的非空字符串。

每行的两个字符串之间用恰好一个空格分隔开,每行的末尾没有多余的空格。

输出格式

输出共 n 行,每行一个正整数或字符串表示第 i 台计算机的连接状态。其中:

如果第 i 台计算机为服务机,则:

  1. 如果其提供符合规范的地址串且成功建立连接,输出字符串 OK。
  2. 如果其提供符合规范的地址串,但由于先前有相同地址串的服务机而无法成功建立连接,输出字符串 FAIL。
  3. 如果其提供的地址串不是符合规范的地址串,输出字符串 ERR。

如果第 i 台计算机为客户机,则:

  1. 如果其提供符合规范的地址串且成功加入连接,输出一个正整数表示这台客户机连接到的服务机的编号。
  2. 如果其提供符合规范的地址串,但无法成功加入连接时,输出字符串 FAIL。
  3. 如果其提供的地址串不是符合规范的地址串,输出字符串 ERR。

include <bits/stdc++.h>

using namespace std;

define int long long

int n;
map<string , int>ma;
int a[10];

bool check(string s)
{
memset(a , 0 , sizeof a);
int cnt1 = 0,cnt2 = 0;
if(s[0] < '0'||s[0] > '9') return 0;
int opt = 1;
int len = s.size();
if(s[0] == '0' && s[1] >= '0'&&s[1] <= '9') return 0;
if(s[len -1] < '0'|| s[len -1] > '9') return 0;
for(int i = 0;i < len;i++)
{
if((s[i-1] < '0' || s[i -1] > '9')&&(s[i] < '0' || s[i] > '9')) return 0;
if(s[i] == '.'|| s[i] '..')
{
opt++;
if(s[i] == '.') cnt1++;
else cnt2++;
if(s[i] == ':'&& cnt1!= 3) return 0;
if(s[i + 1]
'0'&&s[i + 2] != 0&&s[i+2]!= '.'&&s[ i + 2] != '..') return 0;
continue;
}
int c = s[i] - '0';
if(s[i-1] == '0'&&s[i] == '0'&&(s[i-2] == '.'||s[i-2] == '..')) return 0;
a[opt] = a[opt] * 10 + c;
}
if(cnt1 != 3) return 0;
if(cnt2 != 1) return 0;
if(opt != 5) return 0;
if(a[1] < 0 || a[1] > 255) return 0;
if(a[2] < 0 || a[2] > 255) return 0;
if(a[3] < 0 || a[3] > 255) return 0;
if(a[4] < 0 || a[4] > 255) return 0;
if(a[5] < 0 || a[5] > 65535) return 0;
return 1;

}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i = 1;i <= n;i++)
{
string s1,s2;
cin>>s1>>s2;
//cout<<s1<<"\n";
//cout<<s2<<"\n";
if(check(s2) == 0)
{
cout<<"ERR"<<"\n";
continue;
}
else if(s1 == "Server")
{
if(ma[s2]) cout<<"FAIL"<<"\n";
else ma[s2] = i,cout<<"OK"<<"\n";
continue;
}
else if(s1 == "Client")
{
if(!ma[s2])
{
cout<<"FAIL"<<"\n";
continue;
}
else
{
cout<<ma[s2]<<"\n";
continue;
}
}
}
return 0;
}


T4

[CSP-J 2021] 小熊的果篮

题目描述

小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1, 2,……, n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里,具体方法是:每次都把每一个“块”中最左边的水果同时挑出,组成一个果篮。重复这一操作,直至水果用完。注意,每次挑完一个果篮后,“块”可能会发生变化。比如两个苹果“块”之间的唯一桔子被挑走后,两个苹果“块”就变成了一个“块”。请帮小熊计算每个果篮里包含的水果。

输入格式

第一行,包含一个正整数 n,表示水果的数量。

第二行,包含 n 个空格分隔的整数,其中第 i 个数表示编号为 i 的水果的种类,1 代表苹果,0 代表桔子。

输出格式

输出若干行。

第 i 行表示第 i 次挑出的水果组成的果篮。从小到大排序输出该果篮中所有水果的编号,每两个编号之间用一个空格分隔。

正在思考…………

标签:return,9.25,int,地址,&&,符合规范,连接
From: https://www.cnblogs.com/tandongqin77/p/18432091

相关文章

  • 2024.9.25
    昨晚zph和qiuly在床上聊八卦,拖到好晚才睡着。也不知道今天我们几个怎么能准时醒的。当然我看zph没啥精神,他那比闹铃居然能放到第二遍。下次还是早点睡吧,呃呃。 农的赛季更新了,赛季回顾里zph是大部分人的卧底队友。然而我是bronya的卧底队友,我错了,但下次还是玩敖......
  • 9.25学习日志
    一.Python变量1.变量命名(上期已记录)2.变量类型变量是没有类型的,这里所说的变量类型指的是变量所指的内存中对象的类型。在Python中,type()函数用于返回对象的类型。当你使用type(object)时,它会返回该对象的类型,并以<class'typename'>的形式表示。一个变量的typena......
  • 【2024潇湘夜雨】WIN 11_IoT_Ent_LTSC_2024_24H2.26100.1876软件选装纯净特别版9.25
    【系统简介】=============================================================1.本次更新母盘来自WIN11_IoT_Ent_LTSC_2024_24H2.26100.1876.2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也不要在意,可能部分优化不适用。3.OS版本号......
  • 9.25 总结
    T1变换一道DP题,用\(f_{i,j,0/1}\)来表示到了第\(i\)个数,总共修改了\(j\)次,前面的数是/不是山谷点,做DP即可T2交替根据超大眼观察法,我们可以发现,当剩余数组大小为偶数的时候,呈现一个组合数的形式,于是使用公式\(C_{m}^{n}=\dfrac{m!}{n!(m-n)!}\)配合逆元求出组合......
  • 「JVS更新日志」智能BI、低代码、逻辑引擎9.25功能更新说明
    项目介绍JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务+配置化的方式,提供了低代码+数据分析+物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等,所有的应用与能力采用模块化构建,按需开箱使用。更新日志......
  • 2025.9.25 计划
    项目ROS声音信号和视频信号的叠加学习有依赖的背包问题开心的金明机器分配总结......
  • 159.251 - Software Design and Construction
    MasseyUniversity159.251-SoftwareDesignandConstructionAssignment1DeadlineandLateSubmissionPenaltiesYoumustsubmityourfinalworkusingthestreamsubmissionsystemnolaterthan9October2024at11.59pm.Thepenaltyis20%deductedfromt......
  • 【闲话】09.09.25
    0909闲话头图:K7有了,那K8联军的事就要提上日程了今日推歌:《余裕欲feat.nagi&カゼヒキ》稲葉曇もったいないフレーバー这么好的味道真是可惜了啊わかりたかったけど虽然我想要去了解とっておきのデザートは但珍藏的甜点已然无用ダメになってから捨(す)てようかな......
  • 169.254.x.x是什么地址
    ‌APIPA169.254.x.x地址是一个特殊的IP地址范围,被称为“APIPA”(AutomaticPrivateIPAddressing)地址,主要用于在网络通信设置不当时确保最基本的计算机网络连接性。这种地址是由操作系统自动分配给计算机的私有IP地址,当计算机无法通过‌DHCP(动态主机配置协议)服务......
  • 9.25-9.29
      9.25周一上了java课,学会了很多java的知识9.26正常上课9.27今天没课,歇息一下,看会Java9.28课太多了,正常上课9.29上两节课,回来把作业写了,少看了会算法......