hihocoder 挑战赛9 A.好配对(思维题目 防止超时)

#1123 : 好配对

时间限制: 1000ms
单点时限: 1000ms
内存限制: 256MB

描述

给定两个序列a和b,每个序列中可能含有重复的数字。

一个配对(i,j)是一个好配对当从第一个序列中选出一个数ai,再从第二个序列中选出一个数bj且满足ai>bj

给出两个序列,问存在多少个好配对。

输入

输入包含多组数据,数据第一行一个整数T,表示数据组数。(T<=5)

每组数据第一行包含两个整数n和m。(0<n,m<=105)

接下来n行,每行两个整数x和y,表示在第一个序列中有y个x。

接下来m行,每行两个整数x和y,表示在第二个序列中有y个x。(0<x<=109,0<y<=104)

输出

对于每组数据,输出一行一个整数,表示好配对的数量

样例输入
1
2 2
3 2
4 1
3 1
2 3
样例输出
10

算法:O(n)的复杂度
代码:
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 #include <iostream>
 6 #include <string>
 7 #include <iomanip>
 8 #include <vector>
 9 #include <queue>
10 #include <algorithm>
11 #define N 100000+10
12 
13 using namespace std;
14 int n, m;
15 struct nodea
16 {
17     int x, y;
18     bool operator < (const nodea&dd)const
19     {
20         return x<dd.x;
21     }
22 }a[N];
23 
24 struct nodeb
25 {
26     int x, y;
27     bool operator < (const nodeb&dd)const
28     {
29         return x<dd.x;
30     }
31 }b[N];
32 
33 
34 int main()
35 {
36     int t;
37     int i, j;
38     scanf("%d", &t);
39     while(t--)
40     {
41         scanf("%d %d", &n, &m);
42         for(i=0; i<n; i++)
43         {
44             scanf("%d %d", &a[i].x, &a[i].y);
45         }
46         for(i=0; i<m; i++)
47         {
48             scanf("%d %d", &b[i].x, &b[i].y);
49         }
50         sort(a, a+n);
51         sort(b, b+m);
52         long long int cnt=0;
53         long long int sum=0;
54         j=0;
55         for(i=0; i<n; i++)
56         {
57             while(a[i].x > b[j].x && j<m )
58             {
59                 cnt+=b[j].y;
60                 j++;
61             }
62             sum=sum+cnt*a[i].y;
63             //printf("%lld---", sum );
64         }
65         printf("%lld\n", sum );
66     }
67     return 0;
68 }
View Code

 

转载于:https://www.cnblogs.com/yspworld/p/4310760.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的UML序列图,说明了在433MHz子母机配对过程中出现超时和丢包的情况。 ``` title: 433MHz子母机配对超时丢包 母机->子机: 发送配对请求 activate 子机 子机->母机: 确认收到配对请求 activate 母机 子机->母机: 发送子机ID activate 母机 母机->子机: 确认收到子机ID 母机->子机: 发送母机ID deactivate 子机 activate 子机 子机->母机: 确认收到母机ID deactivate 母机 do (检查是否收到配对成功消息?) alt 未收到配对成功消息 子机->母机: 发送配对失败消息 else 收到配对成功消息 子机->母机: 发送配对成功消息 end note over 子机: 等待超时时间后重试 activate 母机 母机->子机: 发送配对请求 deactivate 母机 子机->母机: 确认收到配对请求 子机->母机: 发送子机ID activate 母机 do (检查是否收到子机ID?) alt 未收到子机ID 母机->子机: 重新发送配对请求 else 收到子机ID 母机->子机: 确认收到子机ID 母机->子机: 发送母机ID deactivate 子机 end end note over 母机: 等待超时时间后重试 activate 子机 子机->母机: 确认收到母机ID deactivate 母机 do (检查是否收到母机ID?) alt 未收到母机ID 子机->母机: 重新发送子机ID else 收到母机ID 子机->母机: 发送配对成功消息 end end loop ``` 解释: 1. 母机向子机发送配对请求。 2. 子机确认收到配对请求,并将自己的ID发送给母机。 3. 母机确认收到子机ID,并将自己的ID发送给子机。 4. 子机确认收到母机ID,并向母机发送配对成功的消息。 5. 如果子机在超时时间内没有收到配对成功消息,则会发送配对失败消息,并在一段时间后重试。 6. 如果母机在超时时间内没有收到子机ID,则会重新发送配对请求,并在一段时间后重试。 7. 如果子机在超时时间内没有收到母机ID,则会重新发送子机ID,并在一段时间后重试。 8. 如果收到配对成功消息,则子机和母机完成配对并停止重试。 请注意,这只是一个简单的序列图,实际上可能还需要处理更多的错误情况和细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值