1032. Sharing (25)

本文介绍了一种算法,用于解决两个由节点组成的单词共享相同后缀的问题,并找到该共享后缀的起始位置。输入包括两个单词的首个节点地址及所有节点的数量,每个节点包含地址、字母数据及指向下一个节点的指针。通过遍历节点并比较来找出共同后缀的起始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1032. Sharing (25)
时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B
判题程序 Standard 作者 CHEN, Yue

To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, “loading” and “being” are stored as showed in Figure 1.
这里写图片描述
Figure 1
You are supposed to find the starting position of the common suffix (e.g. the position of “i” in Figure 1).
Input Specification:
Each input file contains one test case. For each case, the first line contains two addresses of nodes and a positive N (<= 105), where the two addresses are the addresses of the first nodes of the two words, and N is the total number of nodes. The address of a node is a 5-digit positive integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is the letter contained by this node which is an English letter chosen from {a-z, A-Z}, and Next is the position of the next node.
Output Specification:
For each case, simply output the 5-digit starting position of the common suffix. If the two words have no common suffix, output “-1” instead.
Sample Input 1:
11111 22222 9
67890 i 00002
00010 a 12345
00003 g -1
12345 D 67890
00002 n 00003
22222 B 23456
11111 L 00001
23456 e 67890
00001 o 00010
Sample Output 1:
67890
Sample Input 2:
00001 00002 4
00001 a 10001
10001 s -1
00002 a 10002
10002 t -1
Sample Output 2:
-1

注意点:

  • 输出地址要进行补零
  • 对静态数组的初始化,一定要为-1
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>

using namespace std;

const int MaxN = 100010;

int main()
{
#ifdef _DEBUG
    freopen("data.txt", "r+", stdin);
#endif // _DEBUG
    int s1, s2, n, addr, next, L1 = 0, L2 = 0, abL;
    int SL[MaxN] = {-1};
    char data;
    std::ios::sync_with_stdio(false);
    cin >> s1 >> s2 >> n;

    for (int i = 0; i < n; ++i)
    {
        cin >> addr >> data >> next;
        SL[addr] = next;
    }

    for (addr = s1; SL[addr] != -1; addr = SL[addr], ++L1);
    for (addr = s2; SL[addr] != -1; addr = SL[addr], ++L2);

    if (L2 > L1)
    {
        swap(L1, L2);
        swap(s1, s2);
    }

    abL = L1 - L2;

    for (int i = 0; i < abL; ++i)
        s1 = SL[s1];

    while (s1 != -1 && s1 != s2)
    {
        s1 = SL[s1];
        s2 = SL[s2];
    }

    if (s1 == -1)
        printf("-1");
    else
        printf("%05d", s1);


    return 0;
}
<think>好的,我现在需要帮用户解析am_proc_start日志中提到的com.google.android.gms nearby.sharing.SharingTileService启动失败的原因和解决方法。首先,我得回忆一下Android系统中的am_proc_start日志的作用。这个日志通常记录进程启动的信息,包括成功或失败的情况。当看到com.google.android.gms服务的启动失败时,可能涉及多个方面,比如权限问题、服务配置错误、依赖服务未启动或者资源冲突等。 用户提到的是nearby.sharing.SharingTileService,这个服务属于Google Play服务的附近共享功能。首先应该检查该服务是否在AndroidManifest.xml中正确声明,并且是否有必要的权限,比如INTERNET、BLUETOOTH等。如果权限缺失,可能导致服务无法启动。此外,Android 10及以上版本对后台启动服务有限制,可能需要前台服务类型权限,或者需要用户授权。 另一个可能性是Google Play服务本身的问题,比如版本过旧或损坏。这时候建议用户更新Google Play服务到最新版本,或者清除其缓存和数据。另外,系统资源不足也可能导致进程启动失败,比如内存不足或文件句柄耗尽,这种情况需要查看系统整体的资源使用情况。 还有可能是其他应用冲突,比如安全软件或电池优化设置阻止了服务的启动。用户可以尝试进入安全模式,排除第三方应用的干扰。此外,检查日志中的具体错误代码或异常堆栈信息是关键,这能更精确地定位问题所在,比如NullPointerException或权限拒绝的具体信息。 最后,如果以上方法都无效,可能需要重置应用偏好设置或者进行系统更新。同时,查看官方的问题追踪系统,如Google Issue Tracker,是否有已知问题及解决方案。综合这些步骤,逐步排查问题,应该能找到导致SharingTileService启动失败的原因并解决它。</think>### 解析 `am_proc_start` 日志中 `com.google.android.gms nearby.sharing.SharingTileService` 启动失败的原因及解决方法 #### 1. **日志背景分析** `am_proc_start` 是 Android 系统日志中记录进程启动的关键标识符,格式通常为: ``` am_proc_start: [PID], [UID], [包名], [进程名], [组件名], [启动原因] ``` 当出现 `nearby.sharing.SharingTileService` 启动失败时,可能伴随以下关键字: - `ActivityManager: Start proc failed for [组件名]` - `DeadSystemException`(系统资源异常) - `Permission Denial`(权限拒绝) --- #### 2. **常见原因及排查步骤** ##### **原因1:权限缺失** - **表现**:日志中包含 `Permission Denial`,例如: ``` java.lang.SecurityException: Permission Denial: starting Intent ``` - **解决方法**: 1. 检查 `AndroidManifest.xml` 中是否声明以下权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 2. 确认应用已动态申请运行时权限(Android 6.0+)[^1]。 ##### **原因2:服务配置错误** - **表现**:日志提示 `Service not registered` 或 `Component not found`。 - **解决方法**: 1. 检查服务是否在 `AndroidManifest.xml` 中正确定义: ```xml <service android:name="com.google.android.gms.nearby.sharing.SharingTileService" /> ``` 2. 确保服务未被禁用或限制(如通过 `pm disable` 命令)[^2]。 ##### **原因3:依赖服务未启动** - **表现**:日志显示 `DeadObjectException` 或 `Binder transaction失败`。 - **解决方法**: 1. 重启 Google Play 服务: ```bash adb shell am force-stop com.google.android.gms ``` 2. 更新 Google Play 服务至最新版本。 ##### **原因4:系统资源限制** - **表现**:日志包含 `DeadSystemException` 或 `NOT_ENOUGH_RESOURCES`。 - **解决方法**: 1. 清理后台进程释放内存。 2. 检查系统文件句柄限制: ```bash adb shell cat /proc/sys/fs/file-max ``` --- #### 3. **高级调试方法** - **查看完整错误堆栈**: ```bash adb logcat -v threadtime | grep "nearby.sharing.SharingTileService" ``` - **检查电池优化限制**: ```bash adb shell dumpsys deviceidle whitelist | grep "com.google.android.gms" ``` --- #### 4. **临时规避措施** 1. 关闭省电模式或后台限制: ```bash adb shell appops set com.google.android.gms RUN_IN_BACKGROUND allow ``` 2. 重置 Google Play 服务数据: ```bash adb shell pm clear com.google.android.gms ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值