- P1576 最小花费
「已注销」
算法c++数据结构
![](最小花费-洛谷)#includeusingnamespacestd;inthead[200010],tim;doubledis[200010];boolflag[200010];structcsz{intto;doublew;intnext;}edge[200010];voidadd(intu,intv,doublew){edge[++tim].to=v;edge[tim].w=1.0-w
- Java – 数组Copy的几种方式
hooc
javaweb
目前在Java中数据拷贝提供了如下方式:cloneSystem.arraycopyArrays.copyOfArrays.copyOfRange1、clone方法clone方法是从Object类继承过来的,基本数据类型(String,boolean,char,byte,short,float,double,long)都可以直接使用clone方法进行克隆,注意String类型是因为其值不可变所以才可
- Java:数学相关类
昭关969
java开发语言
Math类Math类是数学工具类,用于数学计算,构造方法是私有的,方法都是静态的,因此直接类名调用staticintabs(inta)求参数绝对值staticdoubleceil(doublea)向上取整staticdoublefloor(doublea)向下取整staticlonground(doublea)四舍五入staticintmax(inta,intb)求较大值staticintmin(
- AtCoder Beginner Contest 168题解
linbinwu123
AtCoder
这里写目录标题A-∴(Therefore)代码B-...(TripleDots)代码C-:(Colon)代码D-..(DoubleDots)题意题解代码E-∙(Bullet)题意题解代码前三题比较水,直接上代码A-∴(Therefore)代码#includeusingnamespacestd;intmain(){intn;scanf("%d",&n);n=n%10;if(n==3)printf("
- windows C++ 并行编程-编写parallel_for 循环
sului
windowsC++并行编程技术c++开发语言
示例:计算两个矩阵的乘积以下示例显示了matrix_multiply函数,可计算两个方阵的乘积。//Computestheproductoftwosquarematrices.voidmatrix_multiply(double**m1,double**m2,double**result,size_tsize){for(size_ti=0;i#include#include#includeusin
- 9.10网络编程(day7)
Heart14
网络jvmjava
#include#includetypedefstruct{intgh;charname[20];doublesalary;}Worker;intdo_insert(sqlite3*ppDb){Workerwork;printf("请输入插入的工号:");scanf("%d",&work.gh);printf("请输入插入的姓名:");scanf("%s",work.name);printf("请
- 网络编程 9.10
Tangver
数据库
完成代码剩余功能typedefstruct{intgh;charname[20];doublesalary;}Worker;intdo_insert(sqlite3*ppDb){Workerwork;printf("请输入插入的工号:");scanf("%d",&work.gh);printf("请输入插入的姓名:");scanf("%s",work.name);printf("请输入插入的薪水:
- C语言基础(语句篇)
学不会のC
c语言开发语言
输入输出语句按照格式输入输出(常用)格式:%dint%ffloat%cchar%lfdouble%s字符串%#x十六进制%#o八进制%p地址%e指数%-m.n-:代表左对齐,右对齐m:位宽当m大于实际数据位宽时,按m位宽输出当m小于实际数据位宽时,按际数据位宽输出.n:保留小数点后几位输出:printfintprintf(constchar*format,...);功能:按照指定的格式向终端输出内
- JavaSE第一课基本数据类型
走自己的路做自己
JavaSEJavaSE之基本的数据类型
**基本数据类型**数据类型的分类1.数值2.非数值变量的声明与使用1.声明2.赋值3.声明时直接赋值变量命名的规则1.首字母2.其余部分运算符赋值运算符算术运算符自动类型转换强制类型转换关系运算符数据类型的分类1.数值整型:`byte,short,int,long`浮点型:`float,double`2.非数值布尔类型:`boolean字符:`char`字符串:`String`布尔类型的值只能为
- java字符串转对象数组_将字符串数组转为java对象
凯米拉诺
java字符串转对象数组
最近在工作中,遇到一个场景:接受到一个字符串数组,需要将其转为一个对象,反射实现的方法如下:/***将字符串数组转成对象:支持doubleintbooleanstring*@paramvalueList值数组列表*@paramproperties属性数组*@paramc目标class对象*@return返回null时丢弃此结果*/publicListconvertToDomain(Listvalu
- 2020-06-05MATLAB 使用匿名函数进行三重积分求解
锅炉工的自我修养
需求,求解含有两个自由参数的三重积分通过符号函数进行定积分与不定积分https://blog.csdn.net/qq_34374664/article/details/79186465不定积分:int(f,x)f为符号函数句柄symsxf;f=x+1;int(f,x)定积分:int(f,x,a,b)dittoint的用法,以及二重积分如何把double转化为整数int8(a)将变量放入数组,对其索
- C#中的可空类型和空合并运算符
今天开心嘛_
C#c#开发语言
C#中的可空类型在C#中,可空类型(NullableTypes)是指可以表示值类型(如int、double等)的值,也可以表示没有值(即null)的类型。这在处理数据库字段、JSON数据或其他可能不包含值的数据源时非常有用。定义可空类型要定义一个可空类型,你可以在值类型的后面加上一个问号?。例如:int?nullableInt=null;这行代码定义了一个可空的整数类型,它可以存储int类型的值,
- Java学习中,强制类型转换时,没有检查兼容性,引发 ClassCastException怎么办?
Itmastergo
java学习开发语言
Java是一门强类型语言,这意味着在编译时,变量的数据类型已经确定。然而,在实际开发过程中,可能会遇到将对象转换为其他类型的需求,这时就会涉及到类型转换问题。Java提供了自动类型转换和强制类型转换两种方式来处理不同类型之间的转换。自动类型转换(隐式转换)是指编译器在满足某些条件的情况下,自动将一个类型的值转换为另一个兼容类型的值。例如,int类型的变量可以自动转换为double类型。然而,并不是
- 【C++】——初识模版
我爱吃福鼎肉片
c++算法c语言
文章目录前言函数模版函数模版的原理函数模版的实例化类模版类模版的实例化前言当我们使用一个通用的函数://为每一个类型都编写一个重载版本voidSwap(int&left,int&right){inttemp=left;left=right;right=temp;}voidSwap(double&left,double&right){doubletemp=left;left=right;right=
- Python基础
朵&朵
python开发语言
1.命名方法大驼峰:所有单词的首字母均大写小驼峰:第一个单词的首字母小写,其他单词的首字母小写变量:字母、数字、下划线组成,不能以数字开头,不能使用内置关键字,区分大小写2.多种变量输出方式查看类型:type(变量名)字符转义:\例如原本的\t表示一个tab键,\\t表示\t只作为了一个字符串打印出来而非一个tab键类型有:整型int、单精度浮点型float、双精度浮点型double、字符串str
- 牛客周赛 Round 13 解题报告 | 珂学家 | 乘法原理场 + BFS上组合 + 众数贪心
Buoluochuixue
java
题解|#简单计算器##includeintmain(){doublea,b;charoperate;scanf(&迈瑞医疗一面等了面试官十几分钟,更气人在后面上来自我介绍完了就让开始做题。。。题不算很难,做完了之后,讲了下思路,后面根据简历提问。一分钟简单介绍下实习做的东西,我说到一半经纬恒润Java开发一面时长:35min1.聊项目2.gc3.线程共享私有4.类加载过程5.I/O相关6.Spri
- 辛普森积分公式
maze_illusion
数论模板
f()为被积函数doublesimpson(doublel,doubler){doublemid=(l+r)/2;return(f(l)+4*f(mid)+f(r))*(r-l)/6.0;}doubleasr(doublel,doubler){doublemid=(l+r)/2;doubleres=simpson(l,r);if(fabs(res-simpson(l,mid)-simpson(mi
- 《重构:改善既有代码的设计》-学习笔记二(+实战解析
2401_86367399
面试辅导大厂内推重构学习笔记
returnfinalPrice;}privatedoublediscountedPrice(intdiscountLevel){if(discountLevel==2)returngetBasePrice()*0.1;elsereturngetBasePrice()*0.05;}privateintgetBasePrice(){return_quantity*_itemPrice;}优化1,2,
- C#中的装箱和拆箱是什么
今天开心嘛_
C#java算法开发语言
在C#中,装箱(Boxing)和拆箱(Unboxing)是与值类型和引用类型相关的概念,涉及到值类型的数据在托管堆(Heap)上的存储方式。装箱(Boxing)装箱是指将值类型(如int、double、struct等)的实例转换为object类型或者接口类型的实例的过程。在装箱过程中,值类型的数据会被复制到托管堆上,并创建一个object类型的对象来引用这个数据。装箱是隐式的,不需要显式编码,它会
- Java基础之Java中的8种基本数据类型
w乐生
乐生的Java之路java
一,8种基本数据类型1,byte:8位1字节,取值范围:2-7----27-12,shot:16位2字节,取值范围:2-15----215-13,int:32位4字节,取值范围:2-31----231-14,long:64位8字节,取值范围:2-63----263-15,float:32位4字节,取值范围:-2-31----231-16,double:64位8字节,取值范围:-2-63----26
- C语言从头学58——学习头文件math.h(一)
LaoWaiHang
C语言从头学c语言
math.h头文件提供了很多数学计算方面的函数。一、使用数学函数前需要了解的两个类型、两个宏1、float_t:当前系统能够有效执行float运算的类型,宽度不少于float。2、double_t:当前系统能够有效执行double运算的类型,宽度不少于double。(使用系统的float_t、double_t的宽度见例子)3、INFINITY:该宏表示正无穷(表示计算出来的结果太大无法显示)4、N
- Java学习路线
纣王家子迎新
javajava学习
一、Java基础阶段Java语言基础:数据类型与变量:了解Java中的基本数据类型(如int、float、double等)和引用数据类型,掌握变量的声明、初始化和使用。运算符与表达式:学习Java中的算术运算符、关系运算符、逻辑运算符等,以及它们的使用规则和优先级。流程控制:掌握条件语句(if-else)、循环语句(for、while、do-while)和跳转语句(break、continue
- Uniapp中watch的使用
Deryck_德瑞克
uni-appjavascriptvue.js
在Uniapp中,可以使用`watch`属性来监听数据的变化,并执行相应的操作。`watch`可以用于监测单个数据的变化,也可以同时监测多个数据。下面是使用`watch`的步骤:1.在Vue组件中,使用`watch`属性定义需要监测的数据及相应的处理函数。 {{count}} {{double}} exportdefault{ data(){ r
- Apache Doris支持的数据类型详解
Bulut0907
#ApacheDorisApacheDoris数据类型largeintbitmaphyperlogLog
目录1.TINYINT2.SMALLINT3.INT4.BIGINT5.LARGEINT6.FLOAT7.DOUBLE8.DECIMAL9.BOOLEAN10.CHAR11.VARCHAR(M)12.STRING13.DATE14.DATETIME15.BITMAP16.HLL(HyperLogLog)1.TINYINT1字节有符号整数,范围:[-128,127]2.SMALLINT2字节有符号整
- 2021-04-22 java 类和对象 上课笔记
琼琼i
#**构造方法**```java//构造方法,用于在内存中创建对象publicPhone(){System.out.println("我被构造了");}//构造方法publicPhone(doublekuan,doublegao,intzhong,Stringyanse){width=kuan;high=gao;weight=zhong;color=yanse;}作用:帮助开辟内存空间,创建对象特
- java 不四舍五入 保留,java保留两位小数(不四舍五入)
三年九班蓝同学
java不四舍五入保留
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧复制代码代码如下:mportjava.text.DecimalFormat;DecimalFormatdf=newDecimalFormat("######0.00");doubled1=3.23456doubled2=0.0;doubled3=2.0;df.format(d1);df.format(d2);df.for
- 从零开始学习Java的100个课程
陈在天box
java大数据开发语言
哈喽大家好,今天给大家推荐的是从零开始学习Java的100个课程,接下来我会每天更新两篇课程经验供大家参考学习;以下是为大家设计的从零开始学习Java的100个课程:一、Java基础语法Java开发环境搭建安装JDK配置环境变量编写并运行第一个Java程序基本数据类型整数类型(byte、short、int、long)浮点类型(float、double)字符类型(char)布尔类型(boolean)
- C++入门基础篇学习手记: 读取数量不定的输入数据
linhuanzhi
西加加C++数据求和
问题:编写C++程序,要求计算用户输入数据的总和,并打印显示。问题分析:用户输入数据时,由于我们事先不知道要对多少个数据进行求和计算,因此我们需要不断地读取数据直至没有新的输入为止。程序实现的源码如下:#include"iostream"usingnamespacestd;intmain(){doublesum=0,inValue=0;cout>inValue)sum+=inValue;cout<
- 爱心代码源码
北航最菜大学生
c++
#define_CRT_SECURE_NO_WARNINGS1#include#include#include#include#include#includestructPoint{doublex,y;COLORREFcolor;};COLORREFcolors[7]={RGB(255,32,83),RGB(252,222,250),RGB(255,0,0),RGB(255,0,0),RGB(25
- java 中subtract的用法_java中BigDecimal加减乘除基本用法
丹力
java中subtract的用法
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算
- LeetCode[位运算] - #137 Single Number II
Cwind
javaAlgorithmLeetCode题解位运算
原题链接:#137 Single Number II
要求:
给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:中等
分析:
与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一
- 《JavaScript语言精粹》笔记
aijuans
JavaScript
0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。
1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。
2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是
- 你应该更新的Java知识之常用程序库
Kai_Ge
java
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。
Guava
Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。
guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该
- HttpClient
120153216
httpclient
/**
* 可以传对象的请求转发,对象已流形式放入HTTP中
*/
public static Object doPost(Map<String,Object> parmMap,String url)
{
Object object = null;
HttpClient hc = new HttpClient();
String fullURL
- Django model字段类型清单
2002wmj
django
Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。 Cha
- 在SQLSERVER中查找消耗CPU最多的SQL
357029540
SQL Server
返回消耗CPU数目最多的10条语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_of
- Myeclipse项目无法部署,Undefined exploded archive location
7454103
eclipseMyEclipse
做个备忘!
错误信息为:
Undefined exploded archive location
原因:
在工程转移过程中,导致工程的配置文件出错;
解决方法:
 
- GMT时间格式转换
adminjun
GMT时间转换
普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。
1、可以使用
SimpleDateFormat SimpleDateFormat
EEE-三位星期
d-天
MMM-月
yyyy-四位年
- Oracle数据库新装连接串问题
aijuans
oracle数据库
割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下:
Fatal NI connect error 12170.
VERSION INFORMATION: TNS for Linux: Version 10.2.0.4.0 - Product
- 回顾java数组复制
ayaoxinchao
java数组
在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方
- java web会话监听并使用spring注入
bewithme
Java Web
在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。
import java.util.ArrayList;
import java.ut
- NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)
bijian1013
redis数据库NoSQL
一 .Redis常用命令
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
a.键值相关命令
b.服务器相关命令
1.键值相关命令
&
- java枚举序列化问题
bingyingao
java枚举序列化
对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题:
1.加一个枚举值
新机器代码读分布式缓存中老对象,没有问题,不会抛异常。
老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。
2.删一个枚举值
新机器代码读分布式缓存中老对象,反序列
- 【Spark七十八】Spark Kyro序列化
bit1129
spark
当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。
Spark
- Hybridizing OO and Functional Design
bookjovi
erlanghaskell
推荐博文:
Tell Above, and Ask Below - Hybridizing OO and Functional Design
文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,
- Java-Collections Framework学习与总结-HashMap
BrokenDreams
Collections
开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。
&nb
- 读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请
* bylijinnan
*/
abstract class Handler {
/*
- Android中启动外部程序
cherishLC
android
1、启动外部程序
引用自:
http://blog.csdn.net/linxcool/article/details/7692374
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActi
- summary_keep_rate
coollyj
SUM
BEGIN
/*DECLARE minDate varchar(20) ;
DECLARE maxDate varchar(20) ;*/
DECLARE stkDate varchar(20) ;
DECLARE done int default -1;
/* 游标中 注册服务器地址 */
DE
- hadoop hdfs 添加数据目录出错
daizj
hadoophdfs扩容
由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误:
2014-11-18 08:51:39,128 WARN org.apache.hadoop.h
- grep 目录级联查找
dongwei_6688
grep
在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数:
grep -n -r "GET" .
上面的命令将会找出当前目录“.”及当前目录中所有下级目录
- yii 修改模块使用的布局文件
dcj3sjt126com
yiilayouts
方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如: 'theme'=>'mythm', 那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件; 如果未配置主题,那么 yii的模块就使用 protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr
- 设计模式之单例模式
come_for_dream
设计模式单例模式懒汉式饿汉式双重检验锁失败无序写入
今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。
*********************************
- 8、数组
豆豆咖啡
二维数组数组一维数组
一、概念
数组是同一种类型数据的集合。其实数组就是一个容器。
二、好处
可以自动给数组中的元素从0开始编号,方便操作这些元素
三、格式
//一维数组
1,元素类型[] 变量名 = new 元素类型[元素的个数]
int[] arr =
- Decode Ways
hcx2013
decode
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, det
- Spring4.1新特性——异步调度和事件机制的异常处理
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- squid3(高命中率)缓存服务器配置
liyonghui160com
系统:centos 5.x
需要的软件:squid-3.0.STABLE25.tar.gz
1.下载squid
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz
tar zxf squid-3.0.STABLE25.tar.gz &&
- 避免Java应用中NullPointerException的技巧和最佳实践
pda158
java
1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。 总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常
Object unk
- 如何在Swift语言中创建http请求
shoothao
httpswift
概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的
- Spring事务的传播方式
uule
spring事务
传播方式:
新建事务
required
required_new - 挂起当前
非事务方式运行
supports
&nbs