• 2016年10月4日 训练 QAQ


     

    献给我的女神们 μ's 

    今天不小心AK了QAQ

    电阻

    【问题描述】
    首长最近物理进了省队~~专心攻读物理。
    现在首长物理帝要做一个实验,需要一个阻值为 A / B 的电阻,但是他手上只有无
    数个阻值为1的电阻和无数根导线(富有的SZ提供给首长超导体进行实验,所以忽略
    导线自身的电阻),所以首长只好连接一个阻值为A / B的等效电路进行实验,他开始选
    一个阻值为1的电阻,之后他可以在原来的电路上进行以下操作之一,从而得到一个新
    的电路,并且老师规定对于以下操作不限制次数:
    1、串联一个阻值为1的电阻。
    2、并联一个阻值为1的电阻。
    新的电路仍然可以执行以上两个操作。
    当然为了精确,所用的电阻个数要尽量少。现在首长巨巨早就知道他至少需要多少
    个电阻才能完成这个任务,但他不屑于写这题的代码,于是这个任务就交给你了。当然
    如果无解,则输出OrzCSQ。
    【输入格式】
    输入只含一行包含两个整数A和B。
    【输出格式】
    一个正整数,表示首长巨巨至少需要用到的电阻个数。
    【输入输出样例】
    5 2 4
    【样例说明】
    先将2个阻值为1的电阻并联,再将这个并联后的电路串联2个阻值为1的电阻即
    可。
    【数据规模】
    对于30%的数据满足A, B ≤ 20;
    对于100%的数据满足0 ≤ A ≤ 10^18 ,1 ≤ B ≤ 10^18。

    题解:30分你可以随便xjb写个bfs。100分你会发现,串联一个电阻相当于(a+b)/b 并联相当于a/(a+b) 然后你会发现,你可以从a/b一直辗转相除。。然后就做出来了

    p.s. 当a=0 无解。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 long long a,b,ans;
     5 void gcd()
     6 {   long long r=a%b;
     7     ans+=a/b;
     8     while(r)
     9       {a=b;
    10        b=r;
    11        r=a%b;
    12        ans+=a/b;
    13       }
    14     cout<<ans<<endl;
    15 }
    16 int main()
    17 {   
    18     cin>>a>>b;
    19     if(a==0)
    20       cout<<"OrzCSQ"<<endl;
    21     else
    22       gcd();
    23     fclose(stdin);
    24     fclose(stdout);
    25     return 0;
    26 }
    FAQ

    路由器

    【问题描述】
    SZ正在建设信息化校园,要配备无线网络。为了能在增强网络信号的同时尽量满
    足同学们在每个教室都能连上无线网络的心愿,信息组想出了一个神奇的方法——在每
    一层楼布置路由器,则每一台路由器的有效信号区域为以其为圆心、R为半径的圆覆盖
    的区域。现在我们只讨论关于高一所有教室(在同一层楼)的信号覆盖问题。
    SZ总务处共购进了M个路由器分配给高一段所在的楼层,由于建筑师巧(er)妙(bi)
    的设计,所有的N个高一教室分布在一条直线上且教室间的间隔不一定相等。为了尽量
    满足学生的要求,每一个教室必须被至少一台路由器覆盖到。现在的问题是所有路由器
    的覆盖半径是一样的,为定值R,我们希望用R尽可能小的路由器来完成任务,因为这
    样可以节省成本。
    信息组知道你正在学习程序设计,便将求出这个R的任务交给你。当然,为了方便
    计算,学生答应只要信号覆盖到这一间教室的中心点就算覆盖了整间教室,而SZ将给
    出这N间教室的中心点在所有教室构成的直线上的坐标。由于工程师技(zhi)术(shang)
    有限,所以要求输出的R必须保留一位小数(四舍五入)。
    【输入格式】
    输入文件第一行包含两个整数M和N,以下N行每行一个整数Hi表示教室的中心
    点在所有教室构成的直线上的坐标。
    【输出格式】
    输出文件仅包含一个数,表示最小的覆盖半径,保留一位小数(四舍五入)。
    【输入输出样例】
    2 3
    1
    3
    10
    1.0
    【数据规模】
    对于60%的数据,有1 ≤N, M ≤100,-1000 ≤Hi ≤1000;
    对于100%的数据,有1 ≤N, M ≤100000,-10000000 ≤Hi ≤10000000。

    题解:看到题目就知道是比较容易看出来的二分答案题了。(话说这类题目都差不多啊。。参考noip2015 day2 河中跳房子)

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 #include <cmath>
     5 #include <string>
     6 #include <string.h>
     7 #include <numeric>
     8 #define gc getchar()
     9 #define REM main
    10 using namespace std;
    11 int n,m;
    12 int d[233333];
    13 int read()
    14 {
    15     int xxxx=0,fuh=1;char ch=gc;
    16     while(!isdigit(ch)){
    17         if(ch=='-')fuh=-1;
    18         ch=gc;
    19     }
    20     while(isdigit(ch)){
    21         xxxx=(xxxx<<3)+(xxxx<<1)+ch-'0';ch=gc;
    22     }
    23     return xxxx*fuh;
    24 }
    25 bool check(float dis)
    26 {
    27     int i;
    28     float temp=dis*2;
    29     int cnt=1;
    30     int pre=1;
    31     for (i=2;i<=n;i++)
    32       {
    33         if (d[i]-d[pre]>temp)
    34           pre=i,cnt++;
    35       }
    36     if (cnt<=m) return 1;
    37     else return 0;
    38 }
    39 int REM()
    40 {
    41     
    42     m=read();
    43     n=read();
    44     int i;
    45     for (i=1;i<=n;i++)
    46       d[i]=read();
    47  
    48     float mid,l,r;
    49     l=0;r=d[n]-d[1];
    50     while(l+0.01<r)
    51       {
    52           mid=(l+r)*1.0/2;
    53           if (!check(mid))
    54             l=mid+0.01;
    55         else
    56           r=mid-0.01;
    57       }
    58     printf("%.1lf",l);
    59     return 0;
    60 }
    qwq

    跑路

    【问题描述】
    ZRY的工作不仅繁琐,更有苛刻的规定。BOSS要求ZRY每天早上在6:00之前到
    达公司,否则这个月工资清零。可是ZRY偏偏又有赖床的坏毛病。于是为了保住自己
    的工资,ZRY买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是自然数,
    每秒可以任意指定一个k)。当然,这个机器是用int32 存的,所以总跑路长度不能超
    过2^31-1千米。
    ZRY的家到公司的路可以看做一个有向图,ZRY家为点1,公司为点N,每条边
    长度均为一千米。ZRY想每天能醒地尽量晚,所以让你帮他算算,他最少需要几秒才能
    到公司。数据保证1到N至少有一条路径。
    【输入格式】
    第一行两个整数N,M,分别表示点的个数和边的个数。
    接下来M行每行两个数字u,v,表示一条u到v的边。
    【输出格式】
    一行一个数字,表示到公司的最少秒数。
    【输入输出样例】
    4 4
    1 1
    1 2
    2 3
    3
    1
    【数据规模】
    对于50%的数据,满足最优解路径长度 ≤ 1000;
    对于100%的数据,满足N ≤ 50,m ≤ 10000,最优解路径长度 ≤ maxlongint

    题解:看到题目中的2^k就觉得好像也许应该可能大概要用倍增之类的什么玩意儿吧..我们假装a[i][j][k]表示i到j是否有一条2^k的路径,然后我们就可以xjb转移了呀

    a[i][j][k]=1 |  a[i][j][k-1]==1&&a[j][p][k-1]==1

    然后就可以将i,j连边,边权为2^k。。然后跑floyed什么的就过了

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 #include <cmath>
     5 #include <string>
     6 #include <string.h>
     7 #include <numeric>
     8 #define gc getchar()
     9 #define REM main
    10 using namespace std;
    11 int n,m,i,j,l,k,dis[100][100],a[100][100][100];
    12 int read()
    13 {
    14     int xxxx=0,fuh=1;char ch=gc;
    15     while(!isdigit(ch)){
    16         if(ch=='-')fuh=-1;
    17         ch=gc;
    18     }
    19     while(isdigit(ch)){
    20         xxxx=(xxxx<<3)+(xxxx<<1)+ch-'0';ch=gc;
    21     }
    22     return xxxx*fuh;
    23 }
    24 /*int pow4(int a,int b)
    25 {
    26     int r=1,base=a;
    27     while(b!=0)
    28     {
    29         if(b&1)
    30             r*=base;
    31         base*=base;
    32         b>>=1;
    33     }
    34     return r;
    35 }*/
    36 int REM()
    37 {
    38     
    39     n=read();
    40     m=read();
    41     for (i=1;i<=n;i++)
    42       for (j=1;j<=n;j++)
    43         dis[i][j]=1000000;
    44     for (i=1;i<=m;i++)
    45       {
    46           int temp1,temp2;
    47           temp1=read();
    48           temp2=read();
    49           a[temp1][temp2][0]=1;
    50           dis[temp1][temp2]=1;
    51       }
    52     for (i=1;i<=64;i++)
    53       for (j=1;j<=n;j++)
    54          for (l=1;l<=n;l++)
    55             for (k=1;k<=n;k++)
    56                if(a[l][j][i-1]==1&&a[j][k][i-1]==1)
    57               {
    58                 a[l][k][i]=1;
    59                    dis[l][k]=1;
    60               }
    61     for(i=1;i<=n;i++)
    62       for (j=1;j<=n;j++)
    63          for(k=1;k<=n;k++)
    64                 dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k]);// fU**k
    65     printf("%d",dis[1][n]);
    66     return 0; 
    67 }
    cy(划去)

    QAQ是不是很简单呀。。比较今天三个人ak了QAQ

    噗~~~

    Rem is my wife!(。・`ω´・)
  • 相关阅读:
    gin内置验证器使用
    model
    work,工作模式
    orm框架
    simple模式下rabbitmq的代码
    rabbitmq介绍
    订阅模式
    路由模式
    redis五大数据类型
    Go操作redis
  • 原文地址:https://www.cnblogs.com/yz12138/p/5931464.html
Copyright © 2020-2023  润新知