A1065

本题大意是两数相加,比较与另一数c之间的大小,因为可能发生溢出,所以首先要判断两种溢出情况。1.当a,b值均大于0时,而和小于零,则说明发生了溢出,此时和值大于第三值。2.当a,b值均小于0,而和大于等于零,此时和值应小于第三值。
坑点注意:不能在if语句里判断a+b的情况(溢出的两种),要设置sum值。以下为代码段

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
 long long a,b,c,sum;
 bool flag=false;
    cin>>a>>b>>c;
    sum=a+b;
    if (a>0&&b>0&&sum<-1)
    flag=true;
    else if(a<0&&b<0&&sum>=0)
    flag=false;
    else if(a+b>c)
    flag=true;
    if(flag)
     printf("Case #%d: true\n",i);
 else
     printf("Case #%d: false\n",i);
    }  
    
}
1001A,1002A,1003A,1004A,1005A,1006A,1007A,1008A,1009A,1010A,1011A,1012A,1013A,1014A,1015A,1016A,1017A,1018A,1019A,1020A,1021A,1022A,1023A,1024A,1025A,1026A,1027A,1028A,1029A,1030A,1031A,1032A,1033A,1034A,1035A,1036A,1037A,1038A,1039A,1040A,1041A,1042A,1043A,1044A,1045A,1046A,1047A,1048A,1049A,1050A,1051A,1052A,1053A,1054A,1055A,1056A,1057A,1058A,1059A,1060A,1061A,1062A,1063A,1064A,1065A,1066A,1067A,1068A,1069A,1070A,1071A,1072A,1073A,1074A,1075A,1076A,1077A,1078A,1079A,1080A,1081A,1082A,1083A,1084A,1085A,1086A,1087A,1088A,1089A,1090A,1091A,1092A,1093A,1094A,1095A,1096A,1097A,1098A,1099A,1100A,1101A,1102A,1103A,1104A,1105A,1106A,1107A,1108A,1109A,1110A,1111A,1112A,1113A,1114A,1115A,1116A,1117A,1118A,1119A,1120A,1121A,1122A,1123A,1124A,1125A,1126A,1127A,1128A,1129A,1130A,1131A,1132A,1133A,1134A,1135A,1136A,1137A,1138A,1139A,1140A,1141A,1142A,1143A,1144A,1145A,1146A,1147A,1148A,1149A,1150A,1151A,1152A,1153A,1154A,1155A,1156A,1157A,1158A,1159A,1160A,1161A,1162A,1163A,1164A,1165A,1166A,1167A,1168A,1169A,1170A,1171A,1172A,1173A,1174A,1175A,1176A,1177A,1178A,1179A,1180A,1181A,1182A,1183A,1184A,1185A,1186A,1187A,1188A,1189A,1190A,1191A,1192A,1193A,1194A,1195A,1196A,1197A,1198A,1199A,1200A,1201A,1202A,1203A,1204A,1205A,1206A,1207A,1208A,1209A,1210A,1211A,1212A,1213A,1214A,1215A,1216A,1217A,1218A,1219A,1220A,1221A,1222A,1223A,1224A,1225A,1226A,1227A,1228A,1229A,1230A,1231A,1232A,1233A,1453A,1454A,1455A,1456A,1457A,1458A,1459A,1460A,1461A,1462A,1463A,1464A,1465A,1466A,1467A,1468A,1469A,1470A,1471A,1472A,1473A,1474A,1475A,1476A,1477A,1478A,1479A,1480A,1481A,1482A,1483A,1484A,1485A,1486A,1487A,1488A,1489A,1490A,1491A,1492A,1493A,1494A,1495A,1496A,1497A,1498A,1499A,1500A,1501A,1502A,1503A,1504A,1505A,1506A,1507A,1508A,1509A,1510A,1511A,1512A,1513A,1514A,1515A,1516A,1517A,1518A,1519A,1520A,1521A,1522A,1523A,1524A,1525A,1526A,1527A,1528A,1529A,1530A,1531A,1532A,1533A,1534A,1535A,1536A,1537A,1538A,1539A,1540A,1541A,1542A,1543A,1691A,1692A,1693A,1694A,1695A,1696A,1697A,1698A,1699A,1700A,1701A,1702A,1703A,1704A,1705A,1706A,1707A,1708A,1709A,1710A,1711A,1712A,1714A,1715A,1716A,1717A,1718A,1719A,1720A,1721A,1722A,1723A,1724A,1725A,1726A,1727A,1728A,1729A,1730A,1731A,1732A,1733A,1734A,1735A,1736A,1737A,1738A,1739A,1740A,1741A,1742A,1743A,1744A,1745A,1746A,1747A,1748A,1749A,1750A,1751A,1752A,1753A,1754A,1755A,1756A,1757A,1758A,1759A,1760A,1761A,1762A,1763A,1764A,1765A,1766A,1767A,1768A,1769A,1770A,1771A,1772A,1773A,1774A,1775A,1776A,1777A,1778A,1629A,1630A,1631A,1632A,1633A,1634A,1635A,1636A,1637A,1638A,1639A,1640A,1641A,1642A,1643A,1644A,1645A,1646A,1647A,1648A,1649A,1650A,1651A,1652A,1653A,1654A,1655A,1656A,1657A,1658A,1659A,1660A,1661A,1662A,1663A,1664A,1665A,1666A,1667A,1668A,1669A,1670A,1671A,1672A,1673A,1674A,1675A,1676A,1677A,1678A,1679A,1680A,1681A,1682A,1683A,1684A,1685A,1686A,1687A,1688A,1689A,1690A,1544A,1545A,1546A,1547A,1548A,1549A,1550A,1551A,1552A,1553A,1554A,1555A,1556A,1557A,1558A,1559A,1560A,1561A,1562A,1563A,1564A,1565A,1566A,1567A,1568A,1569A,1570A,1571A,1572A,1573A,1574A,1575A,1576A,1577A,1578A,1579A,1580A,1581A,1582A,1583A,1584A,1585A,1586A,1587A,1588A,1589A,1590A,1591A,1592A,1593A,1594A,1595A,1596A,1597A,1598A,1599A,1600A,1601A,1602A,1603A,1604A,1605A,1606A,1607A,1608A,1609A,1610A,1611A,1612A,1613A,1614A,1615A,1616A,1617A,1618A,1619A,1620A,1621A,1622A,1623A,1624A,1625A,1626A,1627A,1628A,1997A,1998A,1999A,2000A,2001A,2002A,2003A,2004A,2005A,2006A,2007A,2008A,2009A,2010A,2011A,2012A,2013A,2014A,2015A,2016A,2017A,2018A,2019A,2020A,2021A,2022A,2023A,2024A,2025A,2026A,2027A,2028A,2029A,2030A,2031A,2032A,2033A,2034A,2035A,2036A,2037A,2038A,2039A,2040A,2041A,2042A,2043A,2044A,2045A,2046A,2047A,2048A,2049A,2050A,2051A
最新发布
11-01
03-15
### PAT 1065 单身狗 (25分) 的 IT 相关内容 #### 题目概述 PAT 1065 是关于判断派对中的单身人士的问题。给定一组夫妻/伴侣关系以及参与派对的人群列表,程序需要找出哪些参与者是单身的。此问题的核心在于如何高效存储和查询夫妻/伴侣的关系。 #### 数据结构的选择 为了快速查找某个人是否有配偶,通常会采用哈希表(`map` 或 `unordered_map`)来实现夫妻/伴侣关系的双向映射。通过这种方式,可以在 O(1) 时间复杂度下完成任意一个人是否单身的查询操作[^4]。 以下是具体的解决方法: #### 输入处理 输入的第一部分描述了夫妻/伴侣关系,第二部分则是派对上的人员名单。对于每一组夫妻/伴侣数据,将其双方的 ID 存入一个哈希表中,并确保能够互相检索对方的信息。例如,如果 A 和 B 是夫妻,则应满足以下条件: - 查询 A 得到 B; - 查询 B 得到 A。 这种设计可以通过两次插入实现:第一次以 A 为键、B 为值;第二次以 B 为键、A 为值。 #### 输出逻辑 遍历派对上所有成员的 ID 列表,逐一检查其是否存在对应的配偶记录。如果没有找到匹配项,则该人被标记为单身并加入最终的结果集合中。注意结果需按照字典序从小到大排列输出[^3]。 #### 实现代码示例 下面是一个基于 C++ 的解决方案: ```cpp #include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n; // 已知夫妻/伴侣的对数 map<int, int> coupleMap; // 建立配偶表 for(int i = 0;i<n;i++) { int a,b; cin>>a>>b; coupleMap[a]=b; coupleMap[b]=a; // key 和 value 互换再存一次 } cin>>m; // 参加派对的总人数 vector<int> guests(m); for(auto &id : guests){ cin>>id; } sort(guests.begin(),guests.end()); // 字典顺序排序 vector<int> singleDogs; for(const auto& id:guests){ if(coupleMap.find(id)==coupleMap.end()){// 如果找不到配偶则认为是单身 singleDogs.push_back(id); } } cout<<singleDogs.size()<<endl; for(size_t j=0;j<singleDogs.size();j++){ if(j!=0)cout<<" "; cout<<singleDogs[j]; } return 0; } ``` 上述代码实现了高效的单次扫描算法,在时间效率方面表现良好,适用于大规模测试用例场景下的超时规避需求[^1]。 #### 复杂度分析 - **空间复杂度**: 主要是用于存储夫妻/伴侣关系的数据结构占用的空间大小,即 O(N),其中 N 表示夫妻/伴侣的数量。 - **时间复杂度**: 构建 spouse 映射所需时间为 O(N),而后续针对每位客人执行的查找操作平均耗时也为常量级别 O(1)。因此整体运行性能较为优越。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值