FZU ICPC 2020 寒假阶段测试 2
P1464 Function
题目描述
对于一个递归函数w(a,b,c)如果a≤0 or b≤0 or c≤0就返回值1.如果a>20 or b>20 or c>20就返回w(20,20,20).
如果a<b并且b<c 就返回w(a,b,c−1)+w(a,b−1,c−1)−w(a,b−1,c).其它的情况就返回w(a−1,b,c)+w(a−1,b−1,c)+w(a−1,b,c−1)−w(a−1,b−1,c−1)这是个简单的递归函数,但实现起来可能会有些问题。当a,b,c均为15时,调用的次数将非常的多。你要想个办法才行.
/* absi2011 : 比如 w(30,−1,0)既满足条件1又满足条件2这种时候我们就按最上面的条件来算所以答案为1*/
输入格式
会有若干行。并以−1,−1,−1结束。保证输入的数在[−9223372036854775808,9223372036854775807]之间,并且是整数。
输出格式
输出若干行,每一行格式:
w(a, b, c) = ans
注意空格。
输入 #1
1 1 1
2 2 2
-1 -1 -1
输出 #1
w(1, 1, 1) = 2
w(2, 2, 2) = 4
说明/提示
记忆化搜索
Accepted
本题提示很明显,需要我们采用记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。
#include <stdio.h>
#include <math.h>
#include <string.h>
long long arr[30][30][30]={0};//记忆化搜索
long long w(long long a,long long b,long long c){
if(a<=0||b<=0||c<=0) return 1;
else if(arr[a][b][c]!=0) return arr[a][b][c];
else if(a>20||b>20||c>20) arr[a][b][c]=w(20,20,20);
else if(a<b&&b<c) arr[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else arr[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
return arr[a][b][c];
}
int main(){
long long a,b,c;
while(1){
scanf("%lld %lld %lld",&a,&b,&c);
// memset(arr,0,sizeof(arr));
if(a==-1&&b==-1&&c==-1) break;
printf("w(%lld, %lld, %lld) = ",a,b,c);
if(a>20) a=21;
if(b>20) b=21;
if(c>20) c=21;
printf("%lld\n",w(a,b,c));
}
return 0;
}
P1014 Cantor表
题目描述
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/1 , 1/2 , 1/3 , 1/4, 1/5, …
2/1, 2/2 , 2/3, 2/4, …
3/1 , 3/2, 3/3, …
4/1, 4/2, …
5/1, …
…
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入格式
整数N(1≤N≤10000000)
输出格式
表中的第N项
输入 #1
7
输出 #1
1/4
Accepted
转至洛谷:
因为题目中要求是以Z字型编号
我们看题目中的表是:
1/1,1/2,1/3 ……
2/1,2/2,2/3 ……
Z字型编号以后(把头向左偏45度):
第一行:1/1 (1号)
第二行:1/2 (2号) 2/1(3号)
第三行:1/3 (6号) 2/2 (5号) 3/1 (4号)
↑ 观察法易得每一行比上一行多1
代码里那个while循环,就是为了通过循环枚举,判断它在编号之后的第几行,第几个位置。
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(){
int n;
int i=1;//i表示第几行
scanf("%d",&n);
while(n>i){
n-=i;
i++;
}
if(!(i%2)) printf("%d/%d\n",n,i+1-n); //第i行第j列 奇偶判断是正序还是倒序
else printf("%d/%d\n",i+1-n,n);
return 0;
}
P1022 计算器的改良
题目背景
NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。
题目描述
为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:
4+3x=8
6a−5+1=2−2a
−5+12y=0
ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“-”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。
你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。
输入格式
一个一元一次方程。
输出格式
解方程的结果(精确至小数点后三位)。
输入 #1
6a-5+1=2-2a
输出 #1
a=0.750
Accepted
转至洛谷:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(){
double sum=0,head=0;//sum是数字之和,head是系数之和
char ch,p;//ch被用作读入每一个字符,p用来储存未知数
int arr[100]={0},len=1,mid,pd;
//arr[]储存每一个出现的数,l记录数组长度,mid分开等号两边,pd为判断此数字是正是负
pd=1;//默认开头第一个数为正
while(ch!='='){
ch=getchar();
if(ch=='-'){
len++;
pd=-1; //只要判断是-数,切换到下一个数,设置这个数为负数
}
if(ch=='+'){
len++;
pd=1;//判断为+,切换下一个数,设置这个数为正数
}
if(ch>='0'&&ch<='9'){
if(!arr[len]) arr[len]=(ch-'0')*pd;
else arr[len]=arr[len]*10+(ch-'0')*pd;
}
if(ch>='a'&&ch<='z'){
p=ch;
if(arr[len]){
head+=arr[len];
arr[len]=0;//如果有前面的系数,则存入系数集合,把塞在数字数组中的系数去掉
}
else{
head+=pd;//判断特殊情况如-x/+x
len--;//判断特殊情况如-x/+x
}
}
}
mid=len;
len++;
pd=1;//存储mid,数组位数进一位,pd=1与上面同理
while (ch!='\n'){
ch=getchar();
if(ch=='-'){
len++;
pd=-1;
}
if(ch=='+'){
len++;
pd=1;
}
if(ch>='0'&&ch<='9'){
if(!arr[len]) arr[len]=(ch-'0')*pd;
else arr[len]=arr[len]*10+(ch-'0')*pd;
}
if(ch>='a'&&ch<='z'){//这里有点不一样,因为未知数要放在等号左边所以这里要减去系数
p=ch;
if(arr[len]){
head-=arr[len];
arr[len]=0;
}
else{
head-=pd;
len--;
}
}
}
for(int i=1;i<=len;i++){
if(i<=mid) sum-=arr[i];
else sum+=arr[i];
}
if(!(sum/head))//这里要加个特判断,因为会出现-0,虽然-0和0等效,但评测机并不吃这一套
// 如果0除以一个负数得-0
printf("%c=0.000\n",p);
else printf("%c=%.3f\n",p,sum/head);
return 0;
}
FZU ICPC 2020 寒假阶段测试 2的更多相关文章
- FZU ICPC 2020 寒假训练 2
A - 排序 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若 干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由 若干个'0'组 ...
- FZU ICPC 2020 寒假训练 6 —— 字符串处理
P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...
- FZU ICPC 2020 寒假训练 5 —— 排序
P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...
- FZU ICPC 2020 寒假训练 4 —— 模拟(二)
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 D 对同 ...
- FZU ICPC 2020 寒假训练 4 —— 模拟(一)
P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...
- FZU ICPC 2020 寒假训练 3
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...
- FZU ICPC 2020 寒假训练 1
B - Sum Problem In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. Input The i ...
- JS阶段测试
JS阶段测试 一.选择题 1.表单中的数据要提交到的处理文件由表单的( c )属性指定. A. method B. name C. action D. 以上都不对 2.在CSS样式 ...
- SpringBoot 阶段测试 1
SpringBoot 阶段测试 1 目录 SpringBoot 阶段测试 1 1.使用JDK8新语法完成下列集合练习: 1.1 List中有1,2,3,4,5,6,7,8,9几个元素要求; (1) 将 ...
随机推荐
- 几分钟就能学会的Python虚拟环境教程
什么是虚拟环境 我们在使用Python的时候,通常用pip来进行包管理.比如我们要安装一个叫requests的库,那么我们就会采用以下命令去安装: pip install requests 那你知道, ...
- Linear Referencing Tools(线性参考工具)
线性参考工具 # Process: 创建路径 arcpy.CreateRoutes_lr("", "", 输出路径要素类, "LENGTH" ...
- redis学习笔记-01 string类型命令
一.set key value set joker 123456 #设定key为joker,value为123456的数据 二.keys * keys * #用于查看该数据库中所有的key值 三.se ...
- maven指令安装jar包到本地仓库
在项目配置过程中,偶尔会遇到jar包下载不来的情况,而同事又有相应的jar包,那么就可以通过maven安装指令直接将jar包安装到自己的本地仓库了. 安装指令: mvn install:install ...
- 2020.10.9--vj个人赛补题
B - A Tide of Riverscape 题意:给出一组字符串,由'0','1',' . '组成,' . '可以换成 0或1,判断第 i 个和第 i+p 个字符是否可以不相等,如果可以则输出 ...
- 图解java 多线程模式 读书笔记
第1章"Single Threaded Execution模式--能通过这座桥的只有一个人" 该模式可以确保执行处理的线程只能是一个,这样就可以有效防止实例不一致. 第⒉章&quo ...
- HttpServletRequest 入门
1. request对象和response对象的原理 request和response对象是由服务器创建的.我们来使用它们 request对象是来获取请求消息,response对象是来设置响应消息 2 ...
- 结对编程——带UI的小初高数学学习软件
一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...
- Noip模拟36 2021.8.11
刚题的习惯还是改不了,怎么办??? T1 Dove打扑克 考场上打的动态开点线段树+并查集,考后发现自己像一个傻子,并查集就行.. 这几天恶补数据结构疯了 用树状数组维护后缀和,$siz_i$表示编号 ...
- 攻防世界 web5.disabled_button
我觉得戴上手套按应该可以! 方法一: 打开网址,发现flag按钮无法点击,F12查看源代码,删除disabled=" ",flag就点击了. 方法二 POST请求, 先分析一下源代 ...