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. K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes

    1 什么是K8ssandra Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用.弹性扩展.性能好等特点. 正应Cassandra的优势,我们经常需要在 ...

  2. HPE ProLiant 系列服务器Microsoft Windows 2008 R2系统下网卡绑定方法

    HPE Network Configuration Utility(以下简称NCU) 网卡绑定工具,用户可以通过该工具很方便的把服务器的多个网卡捆绑到一起以达到容错和增加可用带宽的目的. 1.打开NC ...

  3. 题解 51nod 1597 有限背包计数问题

    题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \( ...

  4. 题解 [HNOI2012]集合选数

    题目传送门 题目大意 直接看题面吧. 思路 感觉挺水的一道题啊?怎么评到紫色的啊?考试的时候LJS出了这个题的加强版我就只想出这个思路,然后就爆了... 不难发现,我们可以构造矩阵: x 2x 4x ...

  5. 题解 「THUPC 2017」小 L 的计算题 / Sum

    题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...

  6. postman如何解决下个接口依赖上一个接口数据

    解决思路:将上一个接口返回的数据保存起来,然后提供下个接口使用,postman中通过设置全局变量来保存数据 步骤1:在Tests中添加如下图js代码. var jsondata = JSON.pars ...

  7. 听说,99% 的 Go 程序员都被 defer 坑过

    原文链接: 听说,99% 的 Go 程序员都被 defer 坑过 先声明:我被坑过. 之前写 Go 专栏时,写过一篇文章:Go 专栏|错误处理:defer,panic 和 recover.有小伙伴留言 ...

  8. Java:并发笔记-02

    Java:并发笔记-02 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 3. 共享模型之管程-1 本章内容-1 共享问题 synchronized 线程安全分 ...

  9. Seata的一些概念

    Seata的一些概念 一.什么是seata 二.AT模式的介绍 1.前提条件 2.整体机制 3.读写隔离的实现 1.写隔离 2.读隔离 三.事务分组 1.事务分组是什么? 2.通过事务分组如何找到后端 ...

  10. Noip模拟44 2021.8.19

    比较惊人的排行榜 更不用说爆零的人数了,为什么联赛会这么难!!害怕了 还要再努力鸭 T1 Emotional Flutter 考场上没切掉的神仙题 考率如何贪心,我们把黑色的条延长$s$,白色的缩短$ ...