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的更多相关文章

  1. FZU ICPC 2020 寒假训练 2

    A - 排序 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若 干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由 若干个'0'组 ...

  2. FZU ICPC 2020 寒假训练 6 —— 字符串处理

    P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...

  3. FZU ICPC 2020 寒假训练 5 —— 排序

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...

  4. FZU ICPC 2020 寒假训练 4 —— 模拟(二)

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 D 对同 ...

  5. FZU ICPC 2020 寒假训练 4 —— 模拟(一)

    P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...

  6. FZU ICPC 2020 寒假训练 3

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...

  7. FZU ICPC 2020 寒假训练 1

    B - Sum Problem In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n. Input The i ...

  8. JS阶段测试

    JS阶段测试 一.选择题 1.表单中的数据要提交到的处理文件由表单的( c )属性指定. A. method     B. name    C. action    D. 以上都不对 2.在CSS样式 ...

  9. SpringBoot 阶段测试 1

    SpringBoot 阶段测试 1 目录 SpringBoot 阶段测试 1 1.使用JDK8新语法完成下列集合练习: 1.1 List中有1,2,3,4,5,6,7,8,9几个元素要求; (1) 将 ...

随机推荐

  1. Python代码阅读(第11篇):展开嵌套列表

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现了展开嵌套列表的功能,将一个嵌套的list展开成一个一维list(不改变原有列表的顺序). 本篇阅读的代 ...

  2. (STAR-CCM+教程)001 软件安装以及界面介绍

    STAR-CCM+是西门子公司旗下产出的一款CFD软件,因其强大的多面体网格划分功能.简易的操作流程被广泛应用于工程计算以及科研工作中. 学习资源 个人在使用STAR-CCM+过程中,主要参考资料来源 ...

  3. 感恩笔记之SQL语句操纵数据集基本功能模板

    SQL查询_基本功能 一 SQL语句整体架构 SELECT --1 查询数据表 INTO --2 新建数据表 FROM --3 查询数据表 WHERE --4 筛选数据表 ORDER BY --5 排 ...

  4. Jekins 插件Extended Choice Parameter显示Json Parameter Type遇到的问题

    在jenkins中使用Extended Choice Parameter插件用来显示自定义的多选项,尝试通过groovy script来显示,正常,但查看它的例子,发现它例子中多选是通过类型 Json ...

  5. 洛谷4631 [APIO2018] Circle selection 选圆圈 (KD树)

    qwq纪念AC450 一开始想这个题想复杂了. 首先,正解的做法是比较麻烦的. qwqq 那么就不如来一点暴力的东西,看到平面上点的距离的题,不难想到\(KD-Tree\) 我们用类似平面最近点对那个 ...

  6. 2021.5.22 vj补题

    A - Marks CodeForces - 152A 题意:给出一个学生人数n,每个学生的m个学科成绩(成绩从1到9)没有空格排列给出.在每科中都有成绩最好的人或者并列,求出最好成绩的人数 思路:求 ...

  7. Redis 高阶数据类型重温

    今天这个专题接着上一篇 Redis 的基本数据类型 继续讲解剩下的高阶数据类型:BitMap.HyperLogLog 和 GEO hash.这些数据结构的底层也都是基于我们前面说的 5 种 基本类型, ...

  8. javascript-原生-结构

    1.获取用户输入内容的方法 window.prompt("提示信息","默认值"); 获取用户输入内容(字符串类型),返回用户输入内容. 2.顺序结构:所有语句 ...

  9. Wireshark 过滤器的使用

    符号 例子 = = tcp.port = = 80 过滤出来TCP包含80端口的数据包 != ip.src != 127.0.0.1 ip的原地址不是127.0.0.1过滤出来 > lp.len ...

  10. SpringCloud微服务实战——搭建企业级开发框架(七):自定义通用响应消息及统一异常处理

      平时开发过程中,无可避免我们需要处理各类异常,所以这里我们在公共模块中自定义统一异常,Spring Boot 提供 @RestControllerAdvice 注解统一异常处理,我们在GitEgg ...