2019.1.6 洛谷1038

本文分享了一道关于神经元状态模拟的编程题解过程,强调了边界条件处理的重要性,并附上了AC代码。作者在解决过程中遇到的难点在于理解输入神经元的状态阈值和特殊情况的处理,最终通过调整代码成功通过所有测试案例。

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

这个题是昨天做的!!这是一个很容易实现的模拟题,本来样例过了我一看还挺开心的,然后提交了之后收到了<当头一棒>……第三个样例和第五个样例总是过不去。。于是乎一头雾水地下载了测试数据之后笔算了一下,结果愣是和sample output的答案大相径庭。。
诶……懵啊。
之后看了题解才恍然大悟。
只要是输入神经元后面的状态阈值u就是0!!哪怕,它输入的数是非0数,你也要自己把它改成0!!
至于第五个样例,如果只有输入神经元,没有神经元之间的联系,那么输入神经元就是输出神经元!!!
看吧,框架一百天,边界情况一百年。orz
下面是AC代码。

#include<iostream>
#include<algorithm>
using namespace std;
int n, p;
int maxm=0;
int findn[100], co = 0;
int cel[200], cell[200];
int pr[102], prr[102];
int conec[102][102];
int state[102], flag[102];
int flag2 = 0;
int func(int sig)
{

    if (state[sig] != 0||flag[sig]==1)return state[sig];
    for (int i = 0; i <= maxm; i++)
    {
        if (conec[i][sig] == 0)continue;
        state[sig] += conec[i][sig] * func(i);
    }
    state[sig] =state[sig]+cel[sig]- cell[sig];
    if (state[sig] < 0) { state[sig] = 0;  }flag[sig] = 1;
    return state[sig];
}
int main()
{	cin >> n >> p;
    for (int i = 1; i <= n; i++) { cin >> cel[i] >> cell[i]; if (cel[i] != 0)cell[i] = 0; }//坑1啊坑1啊!!!
    if (p == 0)
    { for (int i = 1; i <= n; i++) 
    { cout << i << " " << cel[i]; if (i <= n - 1)cout << endl; }//坑2啊坑2啊!
    //system("pause"); 
    return 0; }	
    int u, k;
    for (int i = 0; i < p; i++)
    {
        cin >> u >> k;
        pr[i] = u, prr[i] = k; 
        cin >> conec[u][k];
        maxm = max(k, maxm);
    }
    int f = 0;
    for(int j=0;j<p;j++)
        for (int w = 0; w < p; w++)
        {
            f = 0;
            for (int i = 0; i <= co; i++)
            {
                if (prr[j] == findn[i]) { f = 1; break; }
            }
            if (f == 1)continue;
            if (pr[w] == prr[j])break;
            if (w == p-1)findn[co++] = prr[j];
        }
    sort(findn, findn + co);
    for (int i = 0; i < co; i++)
    {
        int p=func(findn[i]);
        if (p > 0) { cout << findn[i] << " " << p; flag2 = 1; 
        if (i < co - 1)cout << endl;
        }
    }
    if (flag2 == 0)cout << "NULL";
    //system("pause");
    return 0;
}

还有题解区好多人提到了拓扑排序……然而我不会啊。找个时间学学吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值