【总结】纪中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的题目式子没有推出来。


谢谢阅读

posted @ 2021-07-19 21:00  基德不基  阅读(32)  评论(0编辑  收藏  举报