欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 2025/3/20 心得

2025/3/20 心得

2025/4/2 5:11:00 来源:https://blog.csdn.net/bbc121223/article/details/146774621  浏览:    关键词:2025/3/20 心得

第一题。

M. B - Smartphone Addiction 

问题描述

高桥的智能手机电池容量为NN毫安时。在时间0.50.5、1.51.5、2.52.5等时刻(即对于每个整数nn,时间为n + 0.5n+0.5),电池电量减少11毫安时。

高桥将在时间00带着充满电的手机离开家,去咖啡馆MM次,然后在时间TT回家。

他将在第ii个咖啡馆从时间A\_iA_i到时间B\_iB_i停留。在此期间,他会给手机充电,因此电池电量不会减少。相反,在每个整数nn的时间n + 0.5n+0.5,电量会增加11毫安时。然而,如果电量已经等于电池容量,它既不会增加也不会减少。

确定他是否能在回家的路上电池电量不降到00毫安时返回家。

限制条件

  • 1 \le N \le 10^91≤N≤109
  • 1 \le M \le 10001≤M≤1000
  • 1 \le T \le 10^91≤T≤109
  • 0 < A_1 < B\_1 < A\_2 < B\_2 < A\_3 < B\_3 < \dots < A\_M < B\_M < T0<A1​<B_1<A_2<B_2<A_3<B_3<⋯<A_M<B_M<T
  • 输入中的所有值都是整数。

输入

从标准输入以以下格式给出输入:

NN MM TT

A_1A1​ B_1B1​

A_2A2​ B_2B2​

A_3A3​ B_3B3​

\hspace{15pt} \vdots⋮

A_MAM​ B_MBM​

输出

如果高桥能在回家的路上电池电量不降到00毫安时返回家,则打印Yes;否则,打印No


示例输入 1

10 2 20

9 11

13 17

示例输出 1

Yes

电池电量变化如下:

  • 时间00(离家):1010毫安时
  • 时间99(进入第一个咖啡馆):11毫安时
  • 时间1111(离开第一个咖啡馆):33毫安时(他在咖啡馆给手机充电。)
  • 时间1313(进入第二个咖啡馆):11毫安时
  • 时间1717(离开第二个咖啡馆):55毫安时
  • 时间2020(到家):22毫安时

在此过程中,电池电量从未降到00毫安时,所以我们打印Yes


示例输入 2

10 2 20

9 11

13 16

示例输出 2

No

这种情况与示例输入/输出1在他开始在第二个咖啡馆停留时的电量相同,为11毫安时。

当他在时间1616结束那里的停留时,电池电量为44毫安时。

然后在时间19.519.5,电量降至00,所以我们打印No


示例输入 3

15 3 30

5 8

15 17

24 27

示例输出 3

Yes

电池电量在他到家时降至11毫安时,但在途中从未降到00毫安时。


示例输入 4

20 1 30

20 29

示例输出 4

No

电池电量在时间19.519.5降至00毫安时。


示例输入 5

20 1 30

1 10

示例输出 5

No

请注意,当电池电量等于电池容量时,停留在咖啡馆不会增加电池电量。

这道题其实求的就是在他走路的时候它的电量会减少。而在他去咖啡馆的时候,他的电量会增加。

然后呢我们用结构体去模拟就可以了

代码如下,

#include<bits/stdc++.h>
using namespace std;
struct Node {
    int a,b;
}A[1010];
int n,m,t;
int main()
{
    cin>>n>>m>>t; 
    int cnt=n;
     for(int i=1;i<=m;i++) {
        cin>>A[i].a>>A[i].b;
     }
     A[0].a=A[0].b=0;
     A[m+1].a=A[m+1].b=t;
    for(int i=0;i<=m;i++) {
        int a1=A[i].b-A[i].a;
        n+=a1;
        n=min(n,cnt); 
        int a2=A[i+1].a-A[i].b;
        n-=a2;
        if(n<=0) {
        cout<<"No";
            return 0;
        }
    }
    cout<<"Yes";
    return 0;
}

第二题

N. C - ID (AI)

题目描述

在Atcoder共和国,有NN个县,总共有MM个城市属于这些县。

城市ii建立于年份Y_iYi​,属于县P_iPi​。

你可以假设在同一年没有建立多个城市。

决定为每个城市分配一个12位的ID号码。

如果城市ii是属于县ii的城市中建立的第xx个城市,那么城市ii的ID号码的前六位是P_iPi​,最后六位是xx。

在这里,如果P_iPi​或xx(或两者)少于六位数,则向左添加零,直到它有六位数。

找到所有城市的ID号码。

注意,可以有一个县没有城市。

约束条件

  • 1 \leq N \leq 10^51≤N≤105

  • 1 \leq M \leq 10^51≤M≤105

  • 1 \leq P_i \leq N1≤Pi​≤N

  • 1 \leq Y_i \leq 10^91≤Yi​≤109

  • Y_iYi​都是不同的。

  • 输入中的所有值都是整数。


输入

输入从标准输入以以下格式给出:

NN MM

P_1P1​ Y_1Y1​

::

P_MPM​ Y_MYM​

输出

按索引(城市11、城市22、...)的顺序打印所有城市的ID号码。


样例输入1

2 3

1 32

2 63

1 12

样例输出1

000001000002

000002000001

000001000001

  • 由于城市11是县11中建立的第2个城市,其ID号码为000001000002000001000002。

  • 由于城市22是县22中建立的第1个城市,其ID号码为000002000001000002000001。

  • 由于城市33是县11中建立的第1个城市,其ID号码为000001000001000001000001。


样例输入2

2 3

2 55

2 77

2 99

样例输出2

000002000001

000002000002

000002000003

这道题主要运用到的方法就是结构体排序。

首先先排县

然后再排县中的城市。

最后再用一,把它们依次输出来。

代码如下

#include<bits/stdc++.h>
using namespace std;
struct Node {
    int p,y,id,pm;
}A[101000];
bool a11(Node u,Node v)
{
return(u.p<v.p||u.p==v.p&&u.y<v.y)     ;
}
bool a22(Node u,Node v)
{
    return u.id<v.id;
}
int n,m,x=1;
int main()
{
    cin>>n>>m; 
     for(int i=1;i<=m;i++) {
        cin>>A[i].p>>A[i].y;
        A[i].id=i;
     }
     sort(A+1,A+m+1,a11);
     A[1].pm=x;
     for(int i=2;i<=m;i++)
     {
         if(A[i].p==A[i-1].p)
         {
             x++;
             A[i].pm=x;
         }
         else
         {
             x=1;
             A[i].pm=x;
         }
     }
     sort(A+1,A+1+m,a22);
    for(int i=1;i<=m;i++)
    {
        printf("%06d%06d\n",A[i].p,A[i].pm);
    }
    return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com