1 条题解

  • 0
    @ 2024-8-15 17:34:01

    当n比较小时,直接模拟即可。当n比较大时,直接模拟会超时,分析可以发现,由于n只有500,因此A批评B只有不超过250000种可能,一旦X批评Y这件事第二次发生,那么这之后的批评都会重复之前的顺序,即产生循环,因此可以取模处理。

    核心代码
    
    #include<bits/stdc++.h>
    int n,a[505][505],vis[505][505];
    long long m;
    void input()
    {
    	scanf("%d%lld",&n,&m);
    	for(int i = 1;i <= n;i++)
    		for(int j = 1;j <= n;j++)
    			scanf("%d",&a[i][j]);
    }
    void dfs(int x,int y,long long k)
    {
    	if(vis[x][y])//前面访问过了,可以取模处理
    		m = (m - k) % (k - vis[x][y]) + k;
    	if(k == m)
    	{
    		printf("%d",x);
    		exit(0);
    	}
    	vis[x][y] = k;
    	dfs(y,a[y][x],k + 1);
    }
    int main()
    {
    	input();
    	dfs(1,2,1);
    	return 0;
    }
    
    • 1

    信息

    ID
    910
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    12
    已通过
    7
    上传者