zoukankan      html  css  js  c++  java
  • 【暑假集训模拟DAY5】杂项-分治&二分&倍增&快速幂

    前言

    题还没改完,先写个前言...

    今天又挂分(悲伤)

    期望得分:30+20+60+20=130

    实际得分:0+20+0+10=30

    心态不够稳吧...考试的时候看T1T2T3感觉很玄学,都感觉好像有思路,但是又总是差一点实现不出来正解,反复纠结思考了2-3h之后写暴力心态已经不太好了,因为觉得要崩(实际上打好暴力虽然不算太高但也说的过去)

    T1最后打表还抄错个数,爆零;T3没写文件注释掉了(以前从来没有过啊!),爆零;T4不知道为什么挂10分

    总结点什么的话,就是在无论何时都要心态积极,考场上一切都有希望,也要相信自己!

    题解

    T1 road奇怪的道路

    大分治,考场上没做出来的原因是没有发现每一层构造的规律,想的过于简单

    正解:有 4 种状态,分别拓展成不同的新状态,在递归的时候分类讨论

    代码:

    点击查看代码
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pr pair<int,int>
    #define mp make_pair
    const int INF = 0x3f3f3f3f;
    int n,T,x,y;
    pr find(int x,int y,int siz,int opt,int goal,int v)
    {
    	if(siz==1)
    	{
    		return mp(x,y);
    	}
    	int nsiz=siz>>1;
    	int pows=nsiz*nsiz;
    	if(opt==1)
    	{
    		 if(goal<v+pows) return find(x,y,nsiz,2,goal,v);
    		 else if(goal<v+2*pows) return find(x+nsiz,y,nsiz,1,goal,v+pows);
    		 else if(goal<v+3*pows) return find(x+nsiz,y+nsiz,nsiz,1,goal,v+2*pows);
    		 else return find(x,y+nsiz,nsiz,3,goal,v+3*pows);
    	}//2113 
    	if(opt==2)
    	{
    		if(goal<v+pows) return find(x,y,nsiz,1,goal,v);
    		 else if(goal<v+2*pows) return find(x,y+nsiz,nsiz,2,goal,v+pows);
    		 else if(goal<v+3*pows) return find(x+nsiz,y+nsiz,nsiz,2,goal,v+2*pows);
    		 else return find(x+nsiz,y,nsiz,4,goal,v+3*pows);
    	}//1422 1224
    	if(opt==3)
    	{
    		if(goal<v+pows) return find(x+nsiz,y+nsiz,nsiz,4,goal,v);
    		 else if(goal<v+2*pows) return find(x+nsiz,y,nsiz,3,goal,v+pows);
    		 else if(goal<v+3*pows) return find(x,y,nsiz,3,goal,v+2*pows);
    		 else return find(x,y+nsiz,nsiz,1,goal,v+3*pows);
    	}//3341 4331
    	if(opt==4)
    	{
    		if(goal<v+pows) return find(x+nsiz,y+nsiz,nsiz,3,goal,v);
    		 else if(goal<v+2*pows) return find(x,y+nsiz,nsiz,4,goal,v+pows);
    		 else if(goal<v+3*pows) return find(x,y,nsiz,4,goal,v+2*pows);
    		 else return find(x+nsiz,y,nsiz,2,goal,v+3*pows);
    	}//4234 3442
    }
    int calc(pr x,pr y)
    {
    	double abs1=abs(x.first-y.first),
    		   abs2=abs(x.second-y.second);
    	return 10*sqrt(abs1*abs1+abs2*abs2)+0.5;
    }
    int main()
    {
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d%d%d",&n,&x,&y);
    		int siz=pow(2,n);
    		pr xa=find(1,1,siz,1,x,1);
    		pr ya=find(1,1,siz,1,y,1);
    		int ans=calc(xa,ya);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    /*
    3
    1 1 2
    2 16 1 
    3 4 33
    */
  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/conprour/p/15139404.html
Copyright © 2011-2022 走看看