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分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...
随机推荐
- win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)
Ubuntu16.04作为目前最新版本的ubuntu系统,相信很多人都想在自己的电脑上安装一下,然而系统的安装方法各式各样,u盘法.grub引导法等等,这里我将介绍在win7系统下用easyBCD软件 ...
- 高性能JavaScript读书笔记
零.组织结构 根据引言,作者将全书划分为四个部分: 一.页面加载js的最佳方式(开发前准备) 二.改善js代码的编程技巧(开发中) 三.构建与部署(发布) 四.发布后性能检测与问题追踪(线上问题优化) ...
- 剑指offer 第一个只出现一次的字符 hash
思路:i表示字符的ASCII码值,cntp[i]表示字符出现的次数. AC代码 class Solution { public: int FirstNotRepeatingChar(string st ...
- uva10603 倒水问题
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...
- mac的一些小技巧
切换到超级管理员: sudo -s: 让你很快的全屏之间进行切换!很方便!很实用! command+tab 今天的感觉到公司的每一个人员,对于mac的系统的使用都是非常的熟悉的,我还什么都不会. 我得 ...
- js获取当前浏览器地址栏的链接,然后在链接后面加参数
比如访问www.baidu.com,url显示成www.baidu.com/?form <script type="text/javascript"> if(locat ...
- 在windows XP系统下编译和使用ffmpeg
最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展.将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基 ...
- FusionCharts 3D环饼图报错
1.在设计FusionCharts 3D环饼图时,出现错误,图显示不出来,具体错误如下图: 2.经过检查,发现声明的变量和下面引用的变量不一致 var doughnut2D = new FusionC ...
- FusionCharts 2D环饼图
1.静态页面 Doughnut.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...
- AM335x(TQ335x)学习笔记——LCD驱动移植
TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由 ...