zoukankan      html  css  js  c++  java
  • 20182019 ACMICPC, Asia Jiaozuo Regional Contest

    2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

    A. Xu Xiake in Henan Province

    签到

    D. Keiichi Tsuchiya the Drift King

    几何,队友过的,好像说用三角函数会卡精度?

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const long double pi=acos(-1.0);
    
    int main()
    {
        int _;
        scanf("%d",&_);
        while(_--){
            long double a, b, r, d;
            scanf("%Lf %Lf %Lf %Lf",&a,&b,&r,&d);
    //        long double angle=atan2(a+r, b) * 180.0 / pi;
            long double res;
            if(d>=90) res=sqrt((r+a)*(r+a) + b*b)-r;
            else{
                long double ss=tan(d*pi/180);
                long double tmp=b/(a+r);
    //            printf("ss=%Lf tmp=%Lf\n", ss, tmp);
                if(ss>=tmp) res=sqrt((r+a)*(r+a) + b*b)-r;//
                else{
    //                long double ss=tan(d*pi/180.0);
        //            printf("ss=%Lf %lf\n", ss, sqrt(3.0)/3);//
                    long double cg, ca, gd, fd, ad;
                    ca=r+a;
                    cg=ca*ss;
                    gd=b-cg;
                    long double zz=(ca*ca)*(gd*gd)/((ca*ca)+(cg*cg));
                    res=sqrt(ca*ca+b*b-zz)-r;
                }
            }
            printf("%.12Lf\n", max(res, a));
        }
        return 0;
    }
    

    E. Resistors in Parallel

    打表找规律,分子是质数相乘,分母是分子+1相乘,python大数,我把//当成/了,wa(演)飞了~

    import math
    def init(n: int):
        prime = []
        vis = [0] * (n+1)
        cnt = 0
        for i in range(2, n + 1):
            if vis[i] == 0:
                prime.append(i)
                cnt = cnt + 1
            j = 0
            while (j < cnt and prime[j] * i <= n ):
                vis[i * prime[j]] = 1
                if (i % prime[j] == 0):
                    break
                j = j + 1
        return prime
    ret = init(100000)
    _ = int(input())
    for t in range(0,_) :
    	n = int(input())
    	son = int(1)
    	mo = int(1)
    	for i in ret :
    		if son * i > n :
    			break
    		son = son * i
    		mo = mo * (i+1)
    	d = math.gcd(son, mo)
    	son //= d
    	mo //= d
    
    	print("%i/%i"%(son,mo))
     
    

    F. Honeycomb

    这题纯bfs迷宫裸题啊。。。,格子数清楚同时读入的时候不能getline,会T

    #include <bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    const int N=1e6+10;
    
    int n,m;
    char s[10000][10000];
    int len[N];
    bool vis[5000][7000];
    
    struct Node{
        int x,y;
        int cnt;
    }e;
    
    int main(){
        int _;
        cin>>_;
        while(_--){
            cin>>n>>m;
            getchar();
            int cnt=0;
            for(int i=1;i<=4*n+3;++i){
                cnt=0;
                while(char c=getchar()){
                    if(c=='\n') break;
                    s[i][++cnt]=c;
                }
                len[i]=cnt;
            }
            int sx,sy,ex,ey;
            for(int i=1;i<=4*n+3;++i){
                for(int j=1;j<=len[i];++j){
                    vis[i][j]=false;
                    if(s[i][j]=='S'){
                        sx=i,sy=j;
                    }
                    if(s[i][j]=='T'){
                        ex=i,ey=j;
                    }
                }
            }
            queue<Node> q;
            q.push({sx,sy,1});
            int ans=-1;
            while(!q.empty()){
                auto tmp=q.front();
                q.pop();
                
                int x=tmp.x,y=tmp.y;
                int cnt=tmp.cnt;
                
                if(x==ex && y==ey){
                    ans=cnt;
                    break;
                }
          
                if(vis[x][y]) continue;
                vis[x][y]=true;
       
                bool flag=true;
                if(s[x-2][y]!=' ') flag=false;
                if(flag) q.push({x-4,y,cnt+1});
       
                flag=true;
                if(s[x+2][y]!=' ') flag=false;
                if(flag) q.push({x+4,y,cnt+1});
    
                flag=true;
                if(s[x-1][y-3]!=' ') flag=false;
                if(flag) q.push({x-2,y-6,cnt+1});
    
                flag=true;
                if(s[x+1][y-3]!=' ') flag=false;
                if(flag) q.push({x+2,y-6,cnt+1});
    
                flag=true;
                if(s[x-1][y+3]!=' ') flag=false;
                if(flag) q.push({x-2,y+6,cnt+1});
    
                flag=true;
                if(s[x+1][y+3]!=' ') flag=false;
                if(flag) q.push({x+2,y+6,cnt+1});
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    

    I. Distance

    先将每个点坐标求出来,不难发现,每次选左右两边的距离一定最大,记前缀后缀和,输出答案即可

    #include <bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    const int N=1e6+10;
    int n;
    ll a[N],b[N];
    ll pre[N],suf[N];
    
    int main(){
        int _;
        scanf("%d",&_);
        while(_--){
            scanf("%d",&n);
            for(int i=2;i<=n;++i){
                scanf("%lld",&a[i]);
            }
            b[1]=0;
            for(int i=2;i<=n;++i){
                b[i]=b[i-1]+a[i];
            }
            pre[0]=0;
            for(int i=1;i<=n;++i){
                pre[i]=pre[i-1]+b[i];
            }
            suf[n+1]=0;
            for(int i=n;i>=1;--i){
                suf[i]=suf[i+1]+b[i];
            }
            int l=1,r=n;
            int f=0;
            ll ans=0;
            while(l<=r){
                if(!f){
                    ans+=abs((l-1)*b[l]-pre[l-1])+abs(suf[r+1]-(n-r)*b[l]);
                    printf("%lld",ans);
                    l++;
                    f^=1;
                }
                else{
                    ans+=abs((l-1)*b[r]-pre[l-1])+abs(suf[r+1]-(n-r)*b[r]);
                    printf("%lld",ans);
                    r--;
                    f^=1;
                }
                if(l<=r) printf(" ");
            }
            puts("");
        }
    
        return 0;
    }
    
  • 相关阅读:
    游千佛塔有感
    时刻坚持高标准:成大事者的十条“箴言”
    谁愿意嫁给我这样的人
    成功的秘诀之一,就是敢于提出大设想、大思考
    寒冬里的暖阳
    世界最伟大的管理原则
    把你藏在心里
    登天门有感
    办公室保持最佳状态的诀窍
    “领悟”的价值是什么?思维能力训练问答
  • 原文地址:https://www.cnblogs.com/lr599909928/p/15602069.html
Copyright © 2011-2022 走看看