中山题解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq872425710/article/details/51932291

1763. Gift (Standard IO)

Description

        无

Input

  输入的第一行为一个整数t。
  接下来t行,每行包含九个自然数。

Output

输出t行
  每行一个整数,表示2^a+2^b+2^c+2^d+2^e+2^f+2^g+2^h+i。

Sample Input

1

21 30 0 0 0 0 0 0 2147483647

Sample Output

3223322629

Hint

【数据规模】
  40%t<=1000
  100% t<=100000 a,b,c,d,e,f,g,h<=60i<=9223372036854775808

本题:

比较水,打一个点,然后就可以直接模拟了。然后也可以用高精度加快速幂写,就是复杂一点

var
 a:array[1..9] of qword;
 s:array[0..60] of int64;
 t,i,j:longint;
 ans:qword;
begin
 s[0]:=1;
 fori:=1 to 60 do
 s[i]:=s[i-1]*2;
 readln(t);
 
 fori:=1 to t do
 begin
 ans:=0;
  forj:=1 to 9 do
   read(a[j]);
  if(a[1]=60) and (a[2]=60) and (a[3]=60) and (a[4]=60) and (a[5]=60)
   and  (a[6]=60) and (a[7]=60) and (a[8]=60) and (a[9]=9223372036854775808)
    thenbegin writeln('18446744073709551616'); continue; end;
 ans:=s[a[1]]+s[a[2]]+s[a[3]]+s[a[4]]+s[a[5]]+s[a[6]]+s[a[7]]+s[a[8]]+a[9];
 writeln(ans);
 end;
end.

 

----------------------------------------------------------------------------------------------------------------------

1781. Number (Standard IO)

Description

  给出一个整数 ,你可以对 进行两种操作。
  1、将x变成4x+3
  2、将x变成8x+7
  问,最少通过多少次操作,使得x是1000000007的倍数?

Input

  一行,一个整数x(1<=x<=1000000006)。

Output

  一行,表示最少的操作步数。保证答案不超过10^5。

【样例输入1】

125000000

【样例输出1】

1

【样例输入2】

281250001

【样例输出2】

2

【样例输入3】

18426114

【样例输出3】

58

【样例输入4】

705616876

【样例输出4】

100000

【数据约定】
对于50%的数据,答案不超过10
对于80%的数据,答案不超过1000
对于100%的数据,答案不超过100000

本题也是一个水题。一直乘2加一,然后就可以输出那个数乘二除以六,然后就可以有正解

var
 s,a:qword;
 i,j,ans:longint;
begin
 readln(a);
 s:=1000000007;
 while(a mod s)<>0 do
 begin
 a:=a*2+1;
 ans:=ans+1;
 a:=a mod s;
 end;
 iftrunc(ans*2/6)<>ans*2/6 then writeln(trunc(ans*2/6)+1)
                                   else writeln(ans*2/6:0:0);
end.

1765. Circle (Standard IO)

Description

  给定三个点(不共线)的坐标,要求以这三个点为圆心做三个圆,圆两两不相交,不包含,问三个圆的直径和最大为多少。

Input

  第一行为测试数据组数t。接下来t行每行6个数为坐标。

Output

  T行,每行一个整数表示直径和(取下整)。

Sample Input

1

0 0 0 1 1 0

Sample Output

3

 

可以自己画图证明。最大的三个圆形直径就是等于三个点围成的三角形的周长。

var
 a,b,c,d,e,f,t,i,j:longint;
 b1,b2,b3:real;
begin
 readln(t);
 fori:=1 to t do
 begin
 b1:=0; b2:=0; b3:=0;
 readln(a,b,c,d,e,f);
 b1:=sqrt(sqr(a-c)+sqr(b-d));
 b2:=sqrt(sqr(c-e)+sqr(d-f));
 b3:=sqrt(sqr(a-e)+sqr(b-f));
  writeln(trunc(b1+b2+b3));
 end;
end.

----------------------------------------------------------------------------------------------------------------------

1782. Travel (Standard IO)

Description

  给出一个有 个顶点条边的有向图,对于一条边长度为len的边有两种走法。
  1、如果a和b可以互达,则走过这条边的时间为len
  2、如果a和b不可以互达,则走过这条边的时间为2*len
  现在给出一个k,问,从顶点1到顶点n,满足第二种走法不超过k次的最短时间是多少。

Input

  第一行有3个整数n,m,k(1<=n<=100,1<=m<=10000,0<=k<=10),表示有n个顶点,m条边。
  接下来有m行,每行有3个整数xi,yi,leni(1<=xi,yi<=n,1<=leni<=10000),表示长度为leni的有向边。
  注意,两个点可能有多条边连接。

Output

  一行一个整数,表示最短时间。
  如果没有满足题目条件的路径,则输出-1

Sample Input

7 7 3

1 2 2

1 3 2

2 4 3

4 7 5
3 5 4

5 6 1

6 4 2

Sample Output

20

Hint

【数据约定】
  对于30%的数据n<=10,m<=10, 
  对于100%的数据,如题目描述

 

本题打一个-1就可以有十分,我就不解释为什么了。。

正解就是两个弗洛伊德,至于程序嘛,你们自己脑补就好了,老是给程序对你们不好

阅读更多
换一批

没有更多推荐了,返回首页