Test 2022.09.27
今天不知道是什么专场了,但是我知道的是我今天真的没有改完!!!!太气了,最短路的赋值号写成大于竟然不会报错,害得我改了半个下午一个晚上,lz快要崩溃了
T1 Windy数
简简单单数位dp,但是我一测的时候好像打了一个bug,不知道在哪,wa掉了一个点,后面交了一遍之前的代码,就过了,思路就是定义
点击查看代码
void pre() { for(int i=0;i<=9;i++) dp[1][i]=1; for(int i=2;i<=10;i++) { for(int j=0;j<=9;j++) { for(int k=0;k<=9;k++) { if(abs(j-k)>=2) dp[i][j]+=dp[i-1][k]; } } }//dp[i][j]只会在前面有数并要拼上去时才会用到,因为计算时考虑了前导0对后面的影响 }
然后数位
点击查看代码
T2 生日快乐
本来以为是个结论题,于是自己乱整了几组数据,发现要尽量分的平均,于是就有了以下代码
点击查看代码
#include<cstdio> #include<algorithm> #include<cstdlib> using namespace std; void swap1(double &x,double &y){double tmp=x;x=y;y=tmp;} int main() { double x,y,n; scanf("%lf%lf%lf",&x,&y,&n); double ans1=-1,ans2=-1; int div1=(int)n/2,div2=(int)n-div1; double tmp1=1.0*div1/(div1+div2)*x,tmp2=y/(1.0*div1); if(tmp1<tmp2)swap1(tmp1,tmp2); ans1=max(ans1,tmp1/tmp2); tmp1=1.0*div2/(div1+div2)*x,tmp2=y/(1.0*div2); if(tmp1<tmp2)swap1(tmp1,tmp2); ans1=max(ans1,tmp1/tmp2); //////////////// tmp1=1.0*div1/(div1+div2)*y,tmp2=x/(1.0*div1); if(tmp1<tmp2)swap1(tmp1,tmp2); ans2=max(ans2,tmp1/tmp2); tmp1=1.0*div2/(div1+div2)*y,tmp2=x/(1.0*div2); if(tmp1<tmp2)swap1(tmp1,tmp2); ans2=max(ans2,tmp1/tmp2); printf("%.6lf",min(ans1,ans2)); return 0; }
点击查看代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> using namespace std; double dfs(double x,double y,double n) { if(n==1)return 1.0*max(x,y)/min(x,y); double tmp=1145141919;double divide_x=x*1.0/n,divide_y=y*1.0/n; for(int i=1;i<=n/2;i++) { tmp=min(tmp,max(dfs(divide_x*i,y,i),dfs(x-divide_x*i,y,n-i))); tmp=min(tmp,max(dfs(x,divide_y*i,i),dfs(x,y-divide_y*i,n-i))); } return tmp; } int main() { // freopen("happy.in","r",stdin); // freopen("happy.out","w",stdout); double x,y,n; scanf("%lf%lf%lf",&x,&y,&n); printf("%.6lf",dfs(x,y,n)); return 0; }
其中
你可能会问这样怎么保证最后的面积相等??我也有过这种问题,后来想明白了。
由于
T3 最长距离 最气的题(不肯抄题解的倔强
当时以为正解是暴力枚举每个障碍物是否存在,再加一些小小的优化,没想到最短路,受教了,这道题也的的确确让我意识到最短路完全不用去解决纯的边权和最小问题,而是可以通过转化一些状态,再建立相应的边,通过最短路的算法来计算最小代价(言下之意就是抽象化了)
这道题最重要的地方就是!!:定义 为从当前点到 所需要
这之后就是对于每一个图上的点跑一边本人坑踩得足足的。
,为了防止以后成傻逼,不惜时间成本一一列举犯傻的点
硬要用一种脑瘫
点击查看代码
int calc(int x,int y){return m*(x-1)+y;} void code(int &x,int &y,int t) { x=t/m+1; y=x%m; }
就是喜欢在松弛操作里面边更新dis边更新record,成功的写错了下标
点击查看代码
if(dis[c]>dis[calc(tmpx,tmpy)]+(mmap[x1][y1]=='1'?1:0)) { rec[calc(tmpx,tmpy)][calc(i,j)]=dis[calc(i,j)];//这一行是错误的!!! dis[c]=dis[calc(tmpx,tmpy)]+(mmap[x1][y1]=='1'?1:0); if(!vis[calc(x1,y1)])qx.push(x1),qy.push(y1),vis[calc(x1,y1)]=1; }
就是刚刚那个地方把赋值写成了大于
点击查看代码
if(dis[c]>dis[calc(tmpx,tmpy)]+(mmap[x1][y1]=='1'?1:0)) { rec[calc(tmpx,tmpy)][calc(i,j)]=dis[calc(i,j)];//这一行是错误的!!! dis[c]>dis[calc(tmpx,tmpy)]+(mmap[x1][y1]=='1'?1:0);//喜欢复制粘贴?看看这行吧小子 if(!vis[calc(x1,y1)])qx.push(x1),qy.push(y1),vis[calc(x1,y1)]=1; }
最后含泪贴上AC
点击查看代码
本文来自博客园,作者:Hanggoash,转载请注明原文链接:https://www.cnblogs.com/Hanggoash/p/16736141.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效