FJUT2017寒假训练二题解
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寒假训练二题解的更多相关文章
- FZU ICPC 2020 寒假训练 4 —— 模拟(二)
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 D 对同 ...
- FZU ICPC 2020 寒假训练 6 —— 字符串处理
P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...
- FZU ICPC 2020 寒假训练 5 —— 排序
P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...
- 蓝桥杯算法训练<二>
一.最小乘积(基本型)[这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果.为 ...
- 寒假训练——搜索 E - Bloxorz I
Little Tom loves playing games. One day he downloads a little computer game called 'Bloxorz' which m ...
- C - Reduced ID Numbers 寒假训练
T. Chur teaches various groups of students at university U. Every U-student has a unique Student Ide ...
- 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)
题目链接:传送门 知识点: (1)三个点,三角形求面积公式 (2)精度问题: double 15-16位(参考文章) float 6-7位 long long 约20位 int 约10位 unsign ...
- yp寒假训练一
19年东北四省省赛 做了J G C 补了E H J签到题 G 题意: 给n个正方形的两个斜对角点坐标,问最小的移动可以重叠(移动上下左右一格) 思路: 一开始想的是中心pos移动,但是可能有小数,而且 ...
- FZU ICPC 2020 寒假训练 4 —— 模拟(一)
P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...
随机推荐
- MySQL数据库基础(MySQL5.7安装、配置)
写在前面: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...
- 对于JDBC数据库的初始化操作
package com.bluesky.connection; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- aforge 学习-命名空间中文理解
序列 名称 介绍 1 Aforge AForge AForge名称空间的核心名称空间.微软网络框架,其中包含核心类所使用的其他框架的命名空间和类,可以独立用于各种用途. 2 AForge.Cont ...
- service不死之身
为了应用常驻后台,避免被第三方杀掉的方法 1)Service设置成START-STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样 2)通过startForegrou ...
- UVA - 658 最短路
思路:通过前后两种状态建立一条边,利用Dijsktra就可以做了. 注意利用二进制优化. AC代码 #include <cstdio> #include <cmath> #in ...
- Spring 代理对象,cglib,jdk的问题思考,AOP 配置注解拦截 的一些问题.为什么不要注解在接口,以及抽象方法.
可以被继承 首先注解在类上是可以被继承的 在注解上用@Inherited /** * Created by laizhenwei on 17:49 2017-10-14 */ @Target({Ele ...
- elasticsearch-5.1.1使用snapshot接口备份索引
如果ES是集群,那么需要使用共享存储,支持的存储有:a.shared file systemb.S3c.HDFS 我使用的是第一种,NFS共享文件系统.这里要说一下权限问题,ES一般是使用 elast ...
- react按需加载(getComponent优美写法),并指定输出模块名称解决缓存(getComponent与chunkFilename)
react配合webpack进行按需加载的方法很简单,Route的component改为getComponent,组件用require.ensure的方式获取,并在webpack中配置chunkFil ...
- Hive数据倾斜总结
倾斜的原因: 使map的输出数据更均匀的分布到reduce中去,是我们的最终目标.由于Hash算法的局限性,按key Hash会或多或少的造成数据倾斜.大量经验表明数据倾斜的原因是人为的建表疏忽或业务 ...
- React是什么,为什么要使用它?
React是Facrbook内部的一个JavaScript类库,已于1年开源,可用于创建Web用户交互界面.它引入了一种新的方式来处理浏览器DOM.那些需要手动更新DOM.费力地记录每一个状态的日子一 ...