• 洛谷刷题C语言:Physics Problem、PARKING、Trol、信息学竞赛、POT


    记录洛谷刷题C语言


    「dWoi R1」Physics Problem

    题目背景

    面对白板上的物理题,王马陷入了沉思 ……

    题目描述

    n n n 个状态,编号为 1 1 1 n n n。这 n n n 个状态之间有 k k k 种转换关系,第 i i i 个转换关系描述为:第 u i u_i ui 个状态和第 v i v_i vi 个状态可以进行转换。当两个状态之间没有直接的转换关系但有间接的转换关系时,那么这两个状态之间有升降华关系。

    求有多少个升降华关系。

    王马不会做很难的物理题,所以保证一个状态一定可以通过直接或间接的转换为另一个任意状态。

    输入格式

    第一行两个整数 n , k n,k n,k 代表状态数和转换关系数。
    接下来 k k k 行每行两个整数 u i , v i u_i,v_i ui,vi 代表这两个状态之间有转换关系。

    输出格式

    一行一个整数代表有多少个升降华关系。

    样例 #1

    样例输入 #1

    3 2
    1 2
    2 3
    
    • 1
    • 2
    • 3

    样例输出 #1

    1
    
    • 1

    提示

    样例 1 解释

    一共有 3 3 3 个状态,编号为 1 , 2 , 3 1,2,3 1,2,3,第 1 1 1 个状态和第 2 2 2 个状态之间有转换关系,第 2 2 2 个状态和第 3 3 3 个状态之间有转换关系,第 1 1 1 个状态和第 3 3 3 个状态之间没有直接的转换关系,但可以用第 2 2 2 个状态做桥梁进行转换,所以第 1 1 1 个状态和第 3 3 3 个状态之间有升降华关系。只有这一个升降华关系,输出 1 1 1

    数据规模与约定

    本题采用捆绑测试。

    • Subtask 1(5 pts): n ≤ 2 n \le 2 n2
    • Subtask 2(10 pts): k = n − 1 k=n-1 k=n1 u i + 1 = v i u_i+1=v_i ui+1=vi
    • Subtask 3(10 pts): k = n − 1 k=n-1 k=n1 u i = 1 u_i=1 ui=1
    • Subtask 4(25 pts): n , k ≤ 1000 n,k \le 1000 n,k1000
    • Subtask 5(50 pts):无特殊限制。

    对于 100 % 100\% 100% 的数据, 1 ≤ n , k ≤ 1 0 7 1 \le n,k \le 10^7 1n,k107 1 ≤ u i , v i ≤ n 1 \le u_i,v_i \le n 1ui,vin

    保证 u i ≠ v i u_i \ne v_i ui=vi 且不存在 i ≠ j ∧ ( u i = u j ∧ v i = v j ) i \ne j ∧(u_i =u_j∧v_i=v_j) i=j(ui=ujvi=vj) i ≠ j ∧ ( u i = v j ∧ u j = v i ) i \ne j∧(u_i=v_j∧u_j=v_i) i=j(ui=vjuj=vi)

    这句话也可以理解为无重边无自环。

    提示

    注意,对于下面这种情况(a - b 代表 a a a 能与 b b b 互相转换):

    1 - 2
    2 - 3
    1 - 3
    
    • 1
    • 2
    • 3

    1 1 1 个状态和第 3 3 3 个状态算有直接转换关系,即转换关系取“最短路”。

    代码如下

    #include
    #include
    #include
    #include 
    
    
    int main()
    {
    	long long n, k;
    	scanf("%lld%lld",&n,&k);
    	
    	printf("%lld\n",n*(n - 1)/2 - k);
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    [COCI2007-2008#6] PARKING

    题目描述

    Luka 毕业了,他找到了驾驶卡车的工作。

    一天晚上,他将 3 3 3 辆卡车停在一个停车场,收费方式如下:

    • 停放一辆卡车时,司机每分钟给每辆车支付 a a a 元。
    • 停放两辆卡车时,司机每分钟给每辆车支付 b b b 元。
    • 停放三辆卡车时,司机每分钟给每辆车支付 c c c 元。

    给定 a , b , c a, b, c a,b,c,以及 Luka 的三辆卡车的停车时间,请确定 Luka 要交多少钱。

    输入格式

    第一行, a , b , c a, b, c a,b,c,含义见题目描述。

    接下来三行,每行 2 2 2 个数,表示第 i i i 辆车的停车开始时间 b e g i n i begin_i begini 和结束时间 e n d i end_i endi,第 e n d i end_i endi 分钟不收费。

    输出格式

    第一行,一个正整数,表示 Luka 要交的钱。

    样例 #1

    样例输入 #1

    5 3 1
    1 6
    3 5
    2 8
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #1

    33
    
    • 1

    样例 #2

    样例输入 #2

    10 8 6
    15 30
    25 50
    70 80
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #2

    480
    
    • 1

    提示

    数据规模与约定

    对于 100 % 100\% 100% 的数据, 1 ≤ c ≤ b ≤ a ≤ 100 1 \le c \le b \le a \le 100 1cba100 1 ≤ b e g i n i ≤ e n d i ≤ 100 1\le begin_i\le end_i\le 100 1beginiendi100

    说明

    代码如下

    #include
    #include
    #include
    #include 
    
    int max(int a,int b)
    {
    	if(a>b)
    		return a;
    	else
    		return b;
    }
     int a,b,c;
      int l1,r1,l2,r2,l3,r3;//3辆车的停车时间区间
      int maxr=0;
      int ans=0;
      int total;
      int main(){
          scanf("%d%d%d",&a,&b,&c);
          scanf("%d%d%d%d%d%d",&l1,&r1,&l2,&r2,&l3,&r3);
          maxr=max(max(r1,r2),r3);//最后一辆卡车的离开时间;注意:要用2次max函数,不然会wa最后一个测试点
          for(int i=1; i<=maxr; i++){
              total=0;//每次循环先把停车场内卡车数量清零
              if( i>=l1 && i<r1 ){
                  total++;
              }//第一辆车在停车场
              if( i>=l2 && i<r2 ){
                  total++;
              }//第二辆车在停车场
              if( i>=l3 && i<r3 ){
                  total++;
              }//第三辆车在停车场
              if(total==3){
                  ans+=c*3;
              }//有3辆卡车
              else if(total==2){
                  ans+=b*2;
              }//有2辆卡车
              else if(total==1){
                  ans+=a;
              }//有1辆卡车
          }
          printf("%d\n",ans); 
          return 0;
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    [COCI2019-2020#1] Trol

    题目描述

    Stjepan 最近在萨格勒布大学获得了数学学士学位。他的父母自然而然地为他感到骄傲,并决定给他所有不超过 2 60 2^{60} 260 的正整数作为礼物。为了保证它们的安全,他迅速地将所有数存入了一个序列 A A A,使得 A i = i A_i=i Ai=i

    一个妒忌他的朋友 Marin 决定做一个恶作剧:不断地把 A A A 中的每个元素替换为其所有数位之和,直到最终只剩下一位数。

    例如,第 197 197 197 个元素的初始值为 197 197 197。Marin 先将这个值变为 1 + 9 + 7 = 17 1+9+7=17 1+9+7=17,然后再一次改变了它,使其变为 1 + 7 = 8 1+7=8 1+7=8

    Stjepan 对此极为震惊,并请求 Marin 把序列变回初始状态。不幸的是,在他正确回答 Q Q Q 个询问之前,Marin 并不会如此。对于每一个询问,Stjepan 需要回答 A A A 序列中第 l l l 项至第 r r r 项元素的总和。

    来帮 Stjepan 回答这些询问吧!

    输入格式

    第一行包含一个整数 Q Q Q,表示询问次数。

    接下来的 Q Q Q 行,每行包含两个正整数 l i , r i l_i,r_i li,ri,表示 Marin 第 i i i 次询问的区间范围。

    输出格式

    输出 Q Q Q 个询问的答案。答案之间应当用换行符两两分开,并且应当符合询问的顺序。

    样例 #1

    样例输入 #1

    1
    1 5
    
    • 1
    • 2

    样例输出 #1

    15
    
    • 1

    样例 #2

    样例输入 #2

    2
    9 13
    44 45
    
    • 1
    • 2
    • 3

    样例输出 #2

    19
    17
    
    • 1
    • 2

    样例 #3

    样例输入 #3

    1
    1998 2018
    
    • 1
    • 2

    样例输出 #3

    102
    
    • 1

    提示

    数据规模及约定

    对于 20 % 20\% 20% 的数据,所有询问满足 1 ≤ l i ≤ r i ≤ 9 1 \le l_i \le r_i \le 9 1liri9

    对于 60 % 60\% 60% 的数据,所有询问满足 r i − l i ≤ 1000 r_i-l_i \le 1000 rili1000

    对于 100 % 100\% 100% 的数据, 1 ≤ Q ≤ 100 1 \le Q \le 100 1Q100,所有询问满足 1 ≤ l i ≤ r i ≤ 2 60 1 \le l_i \le r_i \le 2^{60} 1liri260

    说明

    本题分值按 COCI 原题设置,满分 50 50 50

    题目译自 COCI2019-2020 CONTEST #1 T1 Trol

    代码如下

    #include
    #include
    #include
    #include 
    
    int main() {
    	int n;
    	scanf("%d",&n); 
    	while(n--) {
    		long long l, r;
    		scanf("%lld%lld",&l,&r);
    		long long times=(r-l+1)/9;//周期统计的个数
    		long long sum=times*45; 
    		for(long long i=l+times*9;i<=r;i++)//计算从l之后的不完整周期的选择,注意在这里的数据是有规律可循的,因此 /9 即可
    			sum+=(i-1)%9+1;	
    		printf("%lld\n",sum);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    [RC-04] 信息学竞赛

    题目描述

    小 R 今天学习了余角有关的数学知识,请你帮帮他计算一个角的余角吧!

    一个角的余角的计算公式如下:

    ∠ B = 90 ° − ∠ A \angle B=90\degree -\angle A B=90°A

    其中 A 是给出的角,B 是你要计算的角。

    输入格式

    一行一个整数 x x x,表示 ∠ A = x ° \angle A=x\degree A=x°

    输出格式

    一行一个整数 y y y,表示 ∠ B = y ° \angle B=y\degree B=y°。你需要严格按照公式计算。

    样例 #1

    样例输入 #1

    100
    
    • 1

    样例输出 #1

    -10
    
    • 1

    提示

    对于 100 % 100\% 100% 的数据, x x x 在 C++ 语言的 int 范围内。即, x ∈ [ − 2 31 , 2 31 − 1 ] x\in[-2^{31},2^{31}-1] x[231,2311]

    代码如下

    #include
    #include
    #include
    #include 
    
    int main() {
    	long long n;
    	scanf("%lld",&n); 
    	printf("%lld",90-n);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    [COCI2015-2016#3] POT

    题目描述

    老师给同学们发了一封电子邮件,任务如下。

    写一个程序,给你 n n n 个数,输出 X X X
    X = n u m 1 p 1 + n u m 2 p 2 + ⋯ + n u m n p n X = num_1^{p_1} + num_2^{p_2} + \cdots + num_n^{p_n} X=num1p1+num2p2++numnpn
    n u m 1 num_1 num1 n u m 2 num_2 num2 ⋯ \cdots n u m n num_n numn 都是整数, p 1 p_1 p1 p 2 p_2 p2 ⋯ \cdots p n p_n pn 都是一位数。

    但是出现了一些玄学错误,使得 X X X 变成了:
    X = q 1 + q 2 + . . . + q n X = q_1 + q_2 +... + q_n X=q1+q2+...+qn

    注: q i = n u m i × 10 + p i q_i = num_i \times 10 + p_i qi=numi×10+pi

    例如,原来的 X X X 2 1 2 + 12 5 3 21^2+125^3 212+1253,但现在变成了 212 + 1253 212+1253 212+1253。请帮助老师编写一个程序,输出原来 X X X 的值。

    输入格式

    第一行,一个正整数 n n n

    接下来 n n n 行,每行一个整数 p i p_i pi

    输出格式

    仅一行一个整数, X X X 的值。

    样例 #1

    样例输入 #1

    2
    212
    1253
    
    • 1
    • 2
    • 3

    样例输出 #1

    1953566
    
    • 1

    样例 #2

    样例输入 #2

    5
    23
    17
    43
    52
    22
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    样例输出 #2

    102
    
    • 1

    样例 #3

    样例输入 #3

    3
    213
    102
    45
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #3

    10385
    
    • 1

    提示

    数据规模及约定

    对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 10 1 \le n \le 10 1n10 10 ≤ p i ≤ 9.999 × 1 0 3 10 \le p_i \le 9.999 \times 10 ^ 3 10pi9.999×103 1 ≤ X ≤ 1 0 9 1 \leq X \leq 10 ^ 9 1X109

    说明

    翻译自 COCI 2015-2016 #3 A POT,满分 50。

    代码如下

    #include
    #include
    #include
    #include 
    
    int n,a,b;
    long long dan,ans;
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a);
    		b=a%10;
    		a=a/10;
    		if(b==0)
    		{
    			dan++;
    		}
    		else
    		{
    			ans=1;
    			for(int j=1;j<=b;j++)
    			{
    				ans*=(long long)a;
    			}
    			dan+=ans;
    		}
    	}
    	printf("%lld\n",dan);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    雨云OSS服务介绍和使用教程,以及Chevereto图床使用雨云OSS的教程
    创建大量栅格文件并分别写入像元数据:C++ GDAL代码实现
    Zabbix告警与飞书集成
    用docker搭建简易ctf题目
    kibana配置文件中明文密码加密
    【C++】类和对象(上)
    blender 快捷键记录
    Unity3D教程:实现房产项目中的材质动态切换
    博客园美化教程
    nodejs+vue全国公考岗位及报考人数分析
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126409945