题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1055这几天脑子不太好尽刷些傻叉的水题。。。区间DP,没什么好说的。。。除了吐槽一下自己因为没删注释性输出而WA了好几次之外额。。。代码:#include#include#includeusingnamespacestd;#definerep(i,x)for(inti=0;i++
【数据结构题目讲解】BZOJ 3306 - 树 利用DFS序求解
阿史大杯茶
数据结构经典数据结构算法c++
BZOJ3306-树Description\mathrm{Description}Description给定111棵以111为根节点的nnn个点的树,接下来有mmm次操作:Vxy将xxx点的权值更改为yyyEx将根改为xxx点Qx查询xxx子树的最小值Solution\mathrm{Solution}Solution首先,考虑如果没有换根操作(即E操作),那么直接使用DFS序配合线段树的方式即可解
BZOJ-2127: happiness(最小割)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2127明显是最小割模型,首先,S向每个节点连边,容量为文科的价值,每个点向T连边,容量为理科的价值,接下来考虑相邻节点的情况(设a,b),只要a,b之中有一个选了理科,那么就要扣除共同选文科的价值,反之亦然,那么新增一个辅助点v,对于S向v连边,容量为a,b共同选文科的价值,然后v向a,b连边,
BZOJ 5441: [Ceoi2018]Cloud computing
weixin_34153893
背包#include#includeusingnamespacestd;intn,m,Len;longlongF[2][100005];structnode{intc,f,v;}E[100005];boolcmp(nodea,nodeb){returna.f>b.f||(a.f==b.f&&a.c>b.c);}intmain(){scanf("%d",&n);for(inti=1;i0)tomax
BZOJ5445 [Ceoi2018]Toys
yjjr
数论bzojOI成长历程
标签:数学题目题目传送门题意简述:达达兔有很多不同种类玩具,每种玩具可能有很多个(存在区别),每天达达兔可以在不同种类的玩具中每种选择一个,组合起来,最多可以玩耍n天(n天中不存在重复组合的情况),问有多少种情况可以满足,求达达兔可以拥有多少玩具分析一眼就知道是数学题然后根据样例简单推推发现答案就是可以将n分解的不同组合算是水题了吧qwqcode#include#include#include#i
bzoj5441: [Ceoi2018]Cloud computing
weixin_30319153
跟着大佬做题。。这题也是有够神仙了。观察一下性质,c很小而f是一个限制条件(然而我并不会心态爆炸)%了一发,就是把电脑和订单一起做背包,订单的c视为负而电脑的v为负,f由大到小排序做背包#include#include#include#include#include#includeusingnamespacestd;typedeflonglongLL;structnode{intc,f;LLv;}
BZOJ 5441 [Ceoi2018]Cloud computing
weixin_33743880
数据结构与算法php
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=5441题解按照频率排序后转化成背包问题。代码#include#include#includeintread(){intx=0,f=1;charch=getchar();while((ch'9')){if(ch=='-'){f=-f;}ch=getchar();}while((ch>='0')
BZOJ5441 [Ceoi2018]Cloud computing
yjjr
DPbzojOI成长历程思维背包
标签:DP,思维题面Description农夫约翰创立了一家为客户提供云端计算服务的公司,但是他还没开始购买计算机。于是他去了电脑商店,看了商店里所有的n台电脑的配置属性列表。每台电脑的属性有CPU核心数量ci,工作频率fi,价格vi,即这台电脑有ci个可以独立工作,不会互相干扰的CPU核心,可以同时给每个CPU核心分配不同的任务。当一个客户在约翰的公司里下订单的时候,订单里会指定特定的CPU核心
BZOJ5442 [Ceoi2018]Global warming
yjjr
DP数据结构bzojOI成长历程
标签:LIS,DP,树状数组题目题目传送门Description给定n(n≤200,000)n(n\leq200,000)n(n≤200,000),你可以将任意a[l]a[l]a[l]至a[r](1≤l≤r≤n)a[r](1\leql\leqr\leqn)a[r](1≤l≤r≤n)每一个元素加上一个d(−x≤d≤x)d(-x\leqd\leqx)d(−x≤d≤x),求aaa数组的最大严格上升子序列
BZOJ 1975 SDOI2010 魔法猪学院 A*k短路
PoPoQQQ
可并堆BZOJA*BZOJBZOJ1975A-stark短路
题目大意:给定一个值E求起点到终点的最多条路径使长度之和不超过Ek短路的A*算法……每个点有一个估价函数=g[x]+h[x]其中g[x]是从源点出发已经走了的长度h[x]是从这个点到汇点的最短路首先先在反图上跑一遍SPFA求出每个点的h[x],然后将源点的g[x]+h[x]加入堆每次取出堆顶时将堆顶的g[x]向所连接的边扩展第k次取出汇点即是答案其中有一个剪枝就是当第k+1次取出某个点时不继续拓展
详解洛谷P2016 战略游戏/BZOJ0495. 树的最小点覆盖之战略游戏(贪心/树形DP)
伟大的拜线段树jjh
游戏
DescriptionBob喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。他要建立一个古城堡,城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵.FormatInput第一行N,表示树中结点的
CF1404BTree Tag/ BZOJ0487. 树上追逐详解
伟大的拜线段树jjh
算法图论深度优先
1.题目传送门:TreeTag-洛谷2.思路我们考虑什么情况下Alice可以获胜.如果≤da,则Alice可以一步就追上Bob.如果Alice处在一个能覆盖整棵树的点,即2da+1≥树的直径,那么Bob也无论走到哪里Alice都能追到,Alice获胜.其它情况下,Alice会一步一步逼近Bob,并一定能把Bob逼近某棵子树.如果当前Alice占据一个点,使Bob无论怎么走都还在Alice的控制范围
BZOJ0481. 树的重心之砍树Link Cut Centroids
伟大的拜线段树jjh
深度优先算法图论
题目思路分类讨论。首先当树只有一个重心的时候,我们删掉最小的边再加上原边即可.再看有两个重心的情况.显然这棵树必定是类似这样的:即删掉A后,以B为根的子树是剩下的最大连通块,反之亦然.那就可以得到一个结论:删掉边(A,B)后,两棵树的大小相等.那我们只要使两棵树的大小不相等,且不使新的点成为重心即可.那就考虑直接从A树中取一位编号最小叶子节点,把这个节点与它父亲的边断开,连到B的直接儿子中编号最小
BZOJ-2753: [SCOI2012]滑雪与时间胶囊(代码)
AmadeusChan
这道题的解法据说是按终边高度第一关键字,边长第二关键字排序,然后KRUSKAL最小生成树,但是本弱实在不懂怎么证明,求大神指教。代码:#include#include#includeusingnamespacestd;#defineMAXN200001#defineMAXM2000001intfather[MAXN];intn,m;inth[MAXN];structedge{intt,d;edge
BZOJ-2588: Spoj 10628. Count on a tree(树上路径第K最值=LCA+可持久化线段树)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2588思路:每个节点上建立一棵维护权值的可持久化线段树(维护从根到这个节点的权值),以他的父节点为历史版本建立,每次查询时直接在线段树上二分即可,所以只需要联立三棵可持久化线段树T[u],T[v],T[lca(u,v)]即可快捷查询。复杂度O(nlogn)********代码:****#incl
BZOJ-1079: [SCOI2008]着色方案(DP)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1079囧囧的一道六维DP,记得用longlong代码:#include#include#include#include#includeusingnamespacestd;#defineMOD(x)(x%=MAX)#defineMAX1000000007#definelllonglongboolf
BZOJ1731: [Usaco2005 dec]Layout 排队布局 差分约束 spfa
Oakley_
BZOJ差分约束spfa
差分约束:最大距离最短路,最小距离最长路最短路的三角不等式:d[i]-d[j]j)物理意义:j,i之间的距离为D,而d[i]-d[j]一定=D(j>i)物理意义:j,i之间的距离为D,而d[i]-d[j]一定>=D,所以求得是最长路建图:j向i连接一条权值为D的边1.题目中说牛的顺序和编号顺序一致,即需要满足d[i]-d[i-1]>=0;转化一下d[i-1]-d[i]=d[x]+D;转化一下d[x
bzoj1731 [Usaco2005 dec]Layout 排队布局(差分约束+spfa)
Icefox_zhx
bzoj差分约束最短路
这题我觉得应该先判有没有负环啊。。。如果1和n不连通,我们从1开始做spfa,如果n在一个负环中呢?我们就判断不到这个负环了啊。。我们会输出-2,可是我觉得应该是-1,根本不存在合法方案啊。。。迷。我先用dfs判负环的程序在bzoj上跑了2900+ms,可怕。。不判的话才20ms。。不过话说dfs版spfa判负环也不会慢这么多啊。。待我研究下。#include#include#includeusi
BZOJ-1853: [Scoi2010]幸运数字 && 2393: Cirno的完美算数教室(容斥原理)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853http://www.lydsy.com/JudgeOnline/problem.php?id=2393两道都是裸的容斥原理,注意一下细节不要爆longlong,然后除去多余的倍数,按照从大到小排序可以使速度变得更快。代码:1853:[Scoi2010]幸运数字:#include#incl
BZOJ-3243: [Noi2013]向量内积
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3243这解法太神了:http://dffxtz.logdown.com/posts/197950-noi2013-vector-inner-product,不过k=3的时候复杂度O(nd^2),常数实在是卡的不行,最后我cheat了最大的那个点才ACQAQ(话说为什么我没cheat的时候是WA。
zzy_dp 专题总结
best_brain
个人总结内容总结动态规划经验分享c++
zzy_dp专题总结[AGC034E]CompleteCompressNewYearandOriginalOrder[AGC024F]SimpleSubsequenceProblem某位歌姬的故事[POI2015]MYJPeriodni[AGC026D]HistogramColoring[JOIOpen2016]摩天大楼[USACO19DEC]TreeDepthP[BZOJ3864]--Herom
BZOJ-1191: [HNOI2006]超级英雄Hero(网络流)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1191明显是匹配,可以用网络流来写,对于每一个问题,连边,然后BFS找增广路,如果找不到就直接退出即可。代码:dbb44aed2e738bd40a77d148a38b87d6277ff971.jpg.png#include#include#include#includeusingnamespac
八月至NOIP前刷题记录
AmadeusChan
因为这些博客内容都是从以前自己的百度空间(已经停止运营)搬运过来的,实在没有精力将链接全部修改成jianshu的链接,就只好这样先啦,还请读者多多包涵~后天就是NOIP复赛了,现在实在没继续刷题的欲望,所以就整理一下这几个月来的刷题内容,没事弄成个列表方便查看吧:数据结构:BZOJ1503[NOI2004]郁闷的出纳员(用BST实现名次树维护即可)(http://hi.baidu.com/gree
2020 ciscn 东北分区赛 re题解
Air_cat
编程二进制CTF程序career安全
唉,居然没师傅出re题,悲伤此题考点在于抓取或解密出迷宫,这里我用的原函数进行生成,改改几个定义就可以输出迷宫了:#include#include#include#include#include#include//#+OXJxnB1QWT49cnWcGFBZOjnyfZoZV1m7+/v/29tf2c=__int64sub_556D3A76F833(unsignedint*a1,inta2){in
BZOJ-1010: [HNOI2008]玩具装箱toy(DP斜率优化)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1010方程:f(i)=min(cost(1,i),f(j-1)+cost(j,i))(cost(i,j)表示从i个玩具到j个连续放入的花费)然后推导出斜率:K(i,j)=(Y(i)-Y(j))/(X(i)-X(j))X(i)=s[i-1]+iY(i)=f[i-1]+X(i)^2当j>k且K(j,
BZOJ-3290: Theresa与数据结构(CDQ分治+二维线段树)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3290首先这题不带修改很好做,按z离散化一下,然后扫一遍,弄个二维的动态线段树维护即可,然后因为有了修改操作,所以使用CDQ分治来转离线,多付出一个logn代价,所以总复杂度是O(nlog^3n)代码(AC的CDQ分治第一题好开心!其实神级分治挺容易的?):#include#include#in
BZOJ-3065: 带插入区间K小值(替罪羊树套权值线段树)
AmadeusChan
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3065刚开始想用splay维护,但是死活想不出旋转时维护信息的方法,果断放弃,然后又打算用分块的思想,插入了sqrt(m)个数后再次分治重建树。ORZ了VFK的博客之后才发现,貌似带根号的会TLE,果断放弃。对于这道题,虽然依赖于旋转的平衡树无法达到要求,但是不依赖或者是依赖旋转程度很小(比如t
[黑洞与暗粒子]没有光的世界
comsci
无论是相对论还是其它现代物理学,都显然有个缺陷,那就是必须有光才能够计算
但是,我相信,在我们的世界和宇宙平面中,肯定存在没有光的世界....
那么,在没有光的世界,光子和其它粒子的规律无法被应用和考察,那么以光速为核心的
&nbs
jQuery Lazy Load 图片延迟加载
aijuans
jquery
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载。
对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度。
版本:
jQuery v1.4.4+
jQuery Lazy Load v1.7.2
注意事项:
需要真正实现图片延迟加载,必须将真实图片地址写在 data-original 属性中。若 src
使用Jodd的优点
Kai_Ge
jodd
1. 简化和统一 controller ,抛弃 extends SimpleFormController ,统一使用 implements Controller 的方式。
2. 简化 JSP 页面的 bind, 不需要一个字段一个字段的绑定。
3. 对 bean 没有任何要求,可以使用任意的 bean 做为 formBean。
使用方法简介
jpa Query转hibernate Query
120153216
Hibernate
public List<Map> getMapList(String hql,
Map map) {
org.hibernate.Query jpaQuery = entityManager.createQuery(hql);
if (null != map) {
for (String parameter : map.keySet()) {
jp
Django_Python3添加MySQL/MariaDB支持
2002wmj
mariaDB
现状
首先,
[email protected] 中默认的引擎为 django.db.backends.mysql 。但是在Python3中如果这样写的话,会发现 django.db.backends.mysql 依赖 MySQLdb[5] ,而 MySQLdb 又不兼容 Python3 于是要找一种新的方式来继续使用MySQL。 MySQL官方的方案
首先据MySQL文档[3]说,自从MySQL
在SQLSERVER中查找消耗IO最多的SQL
357029540
SQL Server
返回做IO数目最多的50条语句以及它们的执行计划。
select top 50
(total_logical_reads/execution_count) as avg_logical_reads,
(total_logical_writes/execution_count) as avg_logical_writes,
(tot
spring UnChecked 异常 官方定义!
7454103
spring
如果你接触过spring的 事物管理!那么你必须明白 spring的 非捕获异常! 即 unchecked 异常! 因为 spring 默认这类异常事物自动回滚!!
public static boolean isCheckedException(Throwable ex)
{
return !(ex instanceof RuntimeExcep
mongoDB 入门指南、示例
adminjun
javamongodb操作
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默
CUDA 5 Release Candidate Now Available
aijuans
CUDA
The CUDA 5 Release Candidate is now available at http://developer.nvidia.com/<wbr></wbr>cuda/cuda-pre-production. Now applicable to a broader set of algorithms, CUDA 5 has advanced fe
Essential Studio for WinRT网格控件测评
Axiba
JavaScripthtml5
Essential Studio for WinRT界面控件包含了商业平板应用程序开发中所需的所有控件,如市场上运行速度最快的grid 和chart、地图、RDL报表查看器、丰富的文本查看器及图表等等。同时,该控件还包含了一组独特的库,用于从WinRT应用程序中生成Excel、Word以及PDF格式的文件。此文将对其另外一个强大的控件——网格控件进行专门的测评详述。
网格控件功能
1、
java 获取windows系统安装的证书或证书链
bewithme
windows
有时需要获取windows系统安装的证书或证书链,比如说你要通过证书来创建java的密钥库 。
有关证书链的解释可以查看此处 。
public static void main(String[] args) {
SunMSCAPI providerMSCAPI = new SunMSCAPI();
S
NoSQL数据库之Redis数据库管理(set类型和zset类型)
bijian1013
redis数据库NoSQL
4.sets类型
Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是O(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。
sadd:向名称为key的set中添加元
异常捕获何时用Exception,何时用Throwable
bingyingao
用Exception的情况
try {
//可能发生空指针、数组溢出等异常
} catch (Exception e) {
 
【Kafka四】Kakfa伪分布式安装
bit1129
kafka
在http://bit1129.iteye.com/blog/2174791一文中,实现了单Kafka服务器的安装,在Kafka中,每个Kafka服务器称为一个broker。本文简单介绍下,在单机环境下Kafka的伪分布式安装和测试验证 1. 安装步骤
Kafka伪分布式安装的思路跟Zookeeper的伪分布式安装思路完全一样,不过比Zookeeper稍微简单些(不
Project Euler
bookjovi
haskell
Project Euler是个数学问题求解网站,网站设计的很有意思,有很多problem,在未提交正确答案前不能查看problem的overview,也不能查看关于problem的discussion thread,只能看到现在problem已经被多少人解决了,人数越多往往代表问题越容易。
看看problem 1吧:
Add all the natural num
Java-Collections Framework学习与总结-ArrayDeque
BrokenDreams
Collections
表、栈和队列是三种基本的数据结构,前面总结的ArrayList和LinkedList可以作为任意一种数据结构来使用,当然由于实现方式的不同,操作的效率也会不同。
这篇要看一下java.util.ArrayDeque。从命名上看
读《研磨设计模式》-代码笔记-装饰模式-Decorator
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.Fi
Maven学习(一)
chenyu19891124
Maven私服
学习一门技术和工具总得花费一段时间,5月底6月初自己学习了一些工具,maven+Hudson+nexus的搭建,对于maven以前只是听说,顺便再自己的电脑上搭建了一个maven环境,但是完全不了解maven这一强大的构建工具,还有ant也是一个构建工具,但ant就没有maven那么的简单方便,其实简单点说maven是一个运用命令行就能完成构建,测试,打包,发布一系列功
[原创]JWFD工作流引擎设计----节点匹配搜索算法(用于初步解决条件异步汇聚问题) 补充
comsci
算法工作PHP搜索引擎嵌入式
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况(http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支
Linux中用shell获取昨天、明天或多天前的日期
daizj
linuxshell上几年昨天获取上几个月
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
#
我所理解的云计算
dongwei_6688
云计算
在刚开始接触到一个概念时,人们往往都会去探寻这个概念的含义,以达到对其有一个感性的认知,在Wikipedia上关于“云计算”是这么定义的,它说:
Cloud computing is a phrase used to describe a variety of computing co
YII CMenu配置
dcj3sjt126com
yii
Adding id and class names to CMenu
We use the id and htmlOptions to accomplish this. Watch.
//in your view
$this->widget('zii.widgets.CMenu', array(
'id'=>'myMenu',
'items'=>$this-&g
设计模式之静态代理与动态代理
come_for_dream
设计模式
静态代理与动态代理
代理模式是java开发中用到的相对比较多的设计模式,其中的思想就是主业务和相关业务分离。所谓的代理设计就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。比如我们在进行删除操作的时候需要检验一下用户是否登陆,我们可以删除看成主业务,而把检验用户是否登陆看成其相关业务
【转】理解Javascript 系列
gcc2ge
JavaScript
理解Javascript_13_执行模型详解
摘要: 在《理解Javascript_12_执行模型浅析》一文中,我们初步的了解了执行上下文与作用域的概念,那么这一篇将深入分析执行上下文的构建过程,了解执行上下文、函数对象、作用域三者之间的关系。函数执行环境简单的代码:当调用say方法时,第一步是创建其执行环境,在创建执行环境的过程中,会按照定义的先后顺序完成一系列操作:1.首先会创建一个
Subsets II
hcx2013
set
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not conta
Spring4.1新特性——Spring缓存框架增强
jinnianshilongnian
spring4
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
shell嵌套expect执行命令
liyonghui160com
一直都想把expect的操作写到bash脚本里,这样就不用我再写两个脚本来执行了,搞了一下午终于有点小成就,给大家看看吧.
系统:centos 5.x
1.先安装expect
yum -y install expect
2.脚本内容:
cat auto_svn.sh
#!/bin/bash
Linux实用命令整理
pda158
linux
0. 基本命令 linux 基本命令整理
1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar.gz #把a.tar.gz解压成a
2. vim小结 2.1 vim替换 :m,ns/word_1/word_2/gc  
独立开发人员通向成功的29个小贴士
shoothao
独立开发
概述:本文收集了关于独立开发人员通向成功需要注意的一些东西,对于具体的每个贴士的注解有兴趣的朋友可以查看下面标注的原文地址。
明白你从事独立开发的原因和目的。
保持坚持制定计划的好习惯。
万事开头难,第一份订单是关键。
培养多元化业务技能。
提供卓越的服务和品质。
谨小慎微。
营销是必备技能。
学会组织,有条理的工作才是最有效率的。
“独立
JAVA中堆栈和内存分配原理
uule
java
1、栈、堆
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放字符串常量和基本类型常量(public static f