【总结】纪中Day7比赛总结
纪中Day7比赛总结
今天发挥的有些差。T3的模拟有许多特殊情况没有考虑到,导致只得了T3只得了30分,第二题其实可以直接暴力的,可惜没看出来。最终得分130分。
T1
思路
这道题就是将环形DP转成线性DP,最后变为区间DP,需要用到三维数组。
T2
思路
因为本蒟蒻太菜了,没有听懂,但是kyx巨爷竟然也没有听懂。
根据题目我们可以得出下面的式子:
ax+by=c。
然后我们要求出x和y,再找出最大值和最小值
AC做法好像是扩展欧几里得啥的。
T3
思路
这道题我们直接暴力模拟。同时进行闪烁魔法和走路,看看在相同时间内,哪个走得更远,就选择哪个。
Code
#include<cstdio>
#include<iostream>
using namespace std;
int i,m,s,t,run,magic;
int main()
{
// freopen("escape.in","r",stdin);
// freopen("escape.out","w",stdout);
scanf("%d%d%d",&m,&s,&t);
for(i=1;i<=t;i++)
{
run+=17;
if(m>=10)
{
m-=10;
magic+=60;
}
else
m+=4;
if(magic>run)
run=magic;
if(run>=s)
{
cout<<"Yes"<<endl<<i;
return 0;
}
}
cout<<"No"<<endl<<run;
return 0;
}
T4
思路
汉诺塔,相信大家小时候都玩过。
我们在草稿本上列出1~4次最少挪动次数,可以得出下表:
数量: 挪动次数:
1 2
2 6
3 14
4 30
我们观察上表,就可以发现:当前的挪动次数其实就是上一次(挪动次数+1)*2。那么我们就可以列出递推式:$f[n]=2(f[n-1]+1)$。
但是,我们观察数据范围,N<=200。绝对会超过long long的范围,所以我们需要用到高精度。
Code
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1001;
int a[maxn],k=2,n;
char str1[maxn];
void input()
{
cin>>n;
memset(a,0,sizeof(a));
a[maxn-1]=2;
}
void add()
{
int g=0;
a[maxn-1]++;
for(int i=maxn-1;i>0;i--)
{
a[i]=a[i]*2+g;
g=a[i]/10;
a[i]=a[i]%10;
}
}
void work()
{
for(int i=1;i<n;i++)
add();
}
void output()
{
int i=1;
while(a[i]==0&&i<maxn) i++;
for(int j=i;j<maxn;j++)
cout<<a[j];
}
int main()
{
freopen("hanoi.in","r",stdin);
freopen("hanoi.out","w",stdout);
input();
work();
output();
fclose(stdin);
fclose(stdout);
return 0;
}
总结
模拟的特殊情况判断少了,T2的题目式子没有推出来。
谢谢阅读
本文来自博客园,作者:基德不基,转载请注明原文链接:https://www.cnblogs.com/ssllyw/p/15032235.html