A题

题意:让你找出唯一的一个四位数,满足对话时的要求。

思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not sure。特别丑的代码附上。。。

 #include<stdio.h>
int a[],b[],c[];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==)break;
int i,flag=,ans,j,k;
for(i=;i<=n;i++)
scanf("%d%d%d",a+i,b+i,c+i);
for(i=;i<=;i++)
{
int a1,a2,a3,a4,i1,i2,i3,i4,bx=,cx=,flg=;///ax代表a[i]的第x个数,ix代表i的第x个数
for(j=;j<=n;j++)
{
bx=;cx=;
a1=a[j]/;
a2=(a[j]/)%;
a3=(a[j]/)%;
a4=a[j]%;
i1=i/;
i2=(i/)%;
i3=(i/)%;
i4=i%;
if(a1==i1)///先判断位置正确的
cx++;
if(a2==i2)
cx++;
if(a3==i3)
cx++;
if(a4==i4)
cx++;
if(a1==i1)///这里如果判和i中的一个数相等,就让i中的那个数为11,就不会再和下个数匹配了,防止出现当类似ai=1111,i=1234的时候a1,a2,a3,a4都和i1匹配成功的情况。
{
bx++;
i1=;
}
else if(a1==i2)
{
bx++;
i2=;
}
else if(a1==i3)
{
bx++;
i3=;
}
else if(a1==i4)
{
bx++;
i4=;
}
if(a2==i1)
{
bx++;
i1=;
}
else if(a2==i2)
{
bx++;
i2=;
}
else if(a2==i3)
{
bx++;
i3=;
}
else if(a2==i4)
{
bx++;
i4=;
}
if(a3==i1)
{
bx++;
i1=;
}
else if(a3==i2)
{
bx++;
i2=;
}
else if(a3==i3)
{
bx++;
i3=;
}
else if(a3==i4)
{
bx++;
i4=;
}
if(a4==i1)
{
bx++;
i1=;
}
else if(a4==i2)
{
bx++;
i2=;
}
else if(a4==i3)
{
bx++;
i3=;
}
else if(a4==i4)
{
bx++;
i4=;
}
if(bx!=b[j]||cx!=c[j])
{
flg=;
break;
}
}
if(flg)
{ ans=i;
flag++;
}
}
if(flag==)
printf("%d\n",ans);
else
printf("Not sure\n");
}
}

AC代码

B题

题意:打老鼠,在某一个时刻把所有的老鼠打下去。

思路:对于一个[l,r]区间,一定是从最左或者最右开始打,因为如果你从中间开始打,最后还是要经过最左最右,这时候中间位置会经过两次,所以中间开始一定不是最优方案。这样的话问题就变成了一个区间dp,dp[l][r][1]代表从右边开始打完[l,r]区间的老鼠,dp[l][r][0]代表从左边开始打完[l,r]区间的老鼠,这样的话有状态转移方程:

dp[l][r][0]=min(dp[l+1][r][0]+d[l+1]-d[l],dp[l-1][r][1]+d[r]-d[l])

dp[l][r][1]=min(dp[l][r-1][0]+d[r]-d[l],dp[l][r-1][1]+d[r]-d[r-1])

然后开个数组记忆走过的路线

 #include<stdio.h>
#include<string.h>
const int INF=;///INF判断能不能在老鼠爬起来之前打完
int t[],d[];
int dp[][][];///dp[i][j][0]代表打完[i,j]区间的老鼠并且停留在左端点用的时间
///dp[i][j][1]代表打完[i,j]区间的老鼠并且停留在右端点用的时间
int route[][][];///记录路线的数组为0代表往右走遇见第一个冒出头的老鼠。
int main() ///为1代表往左走遇见第一个冒出头的老鼠。
{
int n;
while(~scanf("%d",&n))
{
int i,j,l,r,temp;
for(i=;i<=n;i++)
scanf("%d",t+i);
for(i=;i<=n;i++)
scanf("%d",d+i);
memset(dp,,sizeof(dp));
for(l=;l<=n;l++)
{
for(i=;i<=n-l+;i++)
{
j=i+l-;
if(dp[i+][j][]+d[i+]-d[i]<=dp[i+][j][]+d[j]-d[i])
{
dp[i][j][]=dp[i+][j][]+d[i+]-d[i];
route[i][j][]=;
}
else
{
dp[i][j][]=dp[i+][j][]+d[j]-d[i];
route[i][j][]=;
}
if(t[i]<=dp[i][j][])
dp[i][j][]=INF;
if(dp[i][j-][]+d[j]-d[i]<=dp[i][j-][]+d[j]-d[j-])
{
dp[i][j][]=dp[i][j-][]+d[j]-d[i];
route[i][j][]=;
}
else
{
dp[i][j][]=dp[i][j-][]+d[j]-d[j-];
route[i][j][]=;
}
if(t[j]<=dp[i][j][])
dp[i][j][]=INF;
}
}
if(dp[][n][]<INF)///判断起始位置
{
temp=route[][n][];
printf("");
l=,r=n;
}
else if(dp[][n][]<INF)
{
temp=route[][n][];
printf("%d",n);
l=,r=n-;
}
else
{
printf("Mission Impossible\n");
continue;
}
while(l<=r)///路线查找
{
if(temp==)
{
temp=route[l][r][];
printf(" %d",l++);
}
else
{
temp=route[l][r][];
printf(" %d",r--);
}
}
printf("\n");
}
}

AC代码

C题

题意:一堆单词,找到第一个为B开头的单词,用其他单词和它连接,使得最后一个连接的单词末尾为M。

思路:直接暴力深搜就好了

 #include<stdio.h>
#include<string.h>
char a[][];///储存字符串
int dfs(int fi,int count)
{
int i,flag=;
char temp=a[fi][];
a[fi][]='';///首字母标记为0,就可以避免单词被重复使用
if(a[fi][strlen(a[fi])-]=='m')
return ;
for(i=;i<count;i++)
if(a[fi][strlen(a[fi])-]==a[i][])
{
if(dfs(i,count))
return ;
}
a[fi][]=temp;///回溯还原首字母
return ;
}
int main()
{
int n=,i,j,k;
while(~scanf("%s",a[++n]))
{
if(a[n][]=='')
{
int flag=;
for(i=;i<n;i++)
{
if(a[i][]=='b')
{
if(dfs(i,n))
{
flag=;
break;
}
}
}
if(flag)
printf("Yes.\n");
else printf("No.\n");
n=;///字符串重新输入
}
}
}

AC代码

D题

题意:第一天给一颗糖,第二、三天给两颗糖,第四、五、六天给三颗糖......以此类推

思路:模拟这个给糖的方法来写

第一颗糖 一

第二颗糖 二 三

第三颗糖 四 五 六

第四颗糖 七 八 九 十

以此类推

从这上面我们可以发现当第n天为1 3 6 10的时候,第二天糖都会多给一个,很容易看出1 3 6 10是一个二阶等差数列,通项公式为an=n*(n+1)/2,由此就可以写出下面的代码。

 #include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n))
{
int ans=,i,r=;
if(n==)break;
for(i=;i<=n;i++)
{
if(i>r*(r+)/)///判断给的糖数是否要增加
r++;
ans+=r;
}
printf("%d %d\n",n,ans);
}
}

AC代码

E题

题意:给你一个1-500000内数字,让你把它所有的因数加起来,求出加起来之后的数。

思路:这个题的询问次数很多,一个一个算的话很容易超时,所有我们这里可以进行一个因子和打表的预处理。

 #include<stdio.h>
int a[];
int main()
{
int i,j;
for(i=;i<=;i++)
{
for(j=i*;j<=;j+=i)
a[j]+=i;
}
int t;
scanf("%d",&t);
while(t--)
{
int c;
scanf("%d",&c);
printf("%d\n",a[c]);
}
}

AC代码

FJUT2017寒假训练二题解的更多相关文章

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

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

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

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

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

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

  4. 蓝桥杯算法训练<二>

    一.最小乘积(基本型)[这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果.为 ...

  5. 寒假训练——搜索 E - Bloxorz I

    Little Tom loves playing games. One day he downloads a little computer game called 'Bloxorz' which m ...

  6. C - Reduced ID Numbers 寒假训练

    T. Chur teaches various groups of students at university U. Every U-student has a unique Student Ide ...

  7. 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)

    题目链接:传送门 知识点: (1)三个点,三角形求面积公式 (2)精度问题: double 15-16位(参考文章) float 6-7位 long long 约20位 int 约10位 unsign ...

  8. yp寒假训练一

    19年东北四省省赛 做了J G C 补了E H J签到题 G 题意: 给n个正方形的两个斜对角点坐标,问最小的移动可以重叠(移动上下左右一格) 思路: 一开始想的是中心pos移动,但是可能有小数,而且 ...

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

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

随机推荐

  1. MySQL数据库基础(MySQL5.7安装、配置)

      写在前面: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  2. 知识点干货--讲一讲final、finally、finalize的区别

    "横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中." 这首诗来自于宋朝苏轼<题西林壁>,它的意思是,庐山从正面看,它是一道道连绵起伏的山岭:从侧面看,它 ...

  3. Hibernate学习(三)一对多数据的保存

    保存习惯代码 @Test public void saveTwoTableTest(){ Transaction transaction = null; try { transaction = ses ...

  4. rxjs-流式编程

    前言 第一次接触rxjs也是因为angular2应用,内置了rxjs的依赖,了解之后发现它的强大,是一个可以代替promise的框架,但是只处理promise的东西有点拿尚方宝剑砍蚊子的意思. 如果我 ...

  5. PHP秒杀系统全方位设计(一)

    秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...

  6. MysqL 磁盘写入策略之innodb_flush_log_at_trx_commit

    本文从参数含义,性能,安全角度阐述两个参数为不同的值时对db 性能,数据的影响,引擎是Innodb的前提下. 取值:0/1/2 innodb_flush_log_at_trx_commit=0,表示每 ...

  7. HDU - 3533 bfs [kuangbin带你飞]专题二

    看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就 ...

  8. AGC010 - D: Decrementing

    原题链接 题意简述 给出一个个数的序列,足够聪明的AB两人轮流进行以下操作: 令一个大于1的数减1,然后所有数除以. 如果一个人不能操作了,那么他就输了. 输入保证所有数都是正整数并且. 分析 这是一 ...

  9. Appium疑难杂症

    坑之初体验 在Appium的初体验中,遇到了一些坑坑洼洼.将他们记录下来,以后方便查阅. 1. session大于60秒没接收到命令自动关闭 通过Appium-Python-Client连接到appi ...

  10. 内置函数 -- bytes -- 字节码与字符串相互转换

    说明: 1. 返回值为一个新的不可修改字节数组,每个数字元素都必须在0 - 255范围内,是bytearray函数的具有相同的行为,差别仅仅是返回的字节数组不可修改. 2. 当3个参数都不传的时候,返 ...