在二部图中,左侧有 n 个节点,右侧有 m 个节点。节点按 1 到 n 和 1 到 m 的顺序排列。左侧的节点连接到右侧的节点。所有节点均未连接。例如:
1 is connected to 4
2 is connected to 3
3 is connected to 2
3 is connected to 1
Run Code Online (Sandbox Code Playgroud)
我想知道图中有多少个交叉点(这里有 5 个交叉点)。SPOJ上也有类似的问题
我想知道如何使用一些用户提到的二叉索引树来解决这个问题。我正在使用 O(n^2) 算法求解并得到 TLE。
这不是作业。昨天我学习了BIT,正在寻找一些问题,所以我遇到了这个。就告诉我秘诀吧。请不要写出整个程序。
好吧,我试图在Codechef上解决这个翻转硬币问题.用分段树解决它.但是时间限制超过了.我搜索并发现我必须使用懒惰传播.但我无法理解.我的更新功能递归地工作(从上到下).请提供一些提示或用例子解释.还要指出我必须更改代码的位置.
在翻转硬币时,如果节点值为1,则在更新期间将其更改为0,如果为0,则将其更改为1.
start和end是原始数组的限制.树是分段树阵列.
void update(int node, int start, int end,int pos)//pos=position to update
{
if(start==end) tree[node]=(tree[node]==0) ? 1 : 0;
else
{
int mid=(start+end)/2;
if(mid>=pos) update(2*node + 1, start, mid, pos);
else update(2*node + 2, mid+1, end, pos);
tree[node]=tree[2*node +1] + tree[2*node +2];
}
}
Run Code Online (Sandbox Code Playgroud) 请看下面的代码:
char* test ( )
{
char word[20];
printf ("Type a word: ");
scanf ("%s", word);
return word;
}
void main()
{
printf("%s",test());
}
Run Code Online (Sandbox Code Playgroud)
当函数返回时,变量word被销毁并打印一些垃圾值.但当我更换
char word[20];
Run Code Online (Sandbox Code Playgroud)
通过 char *word;
它打印正确的值.根据我的说法,指针变量应该被破坏,类似于字符数组,输出应该是一些垃圾值.任何人都可以解释一下这种含糊之处吗?
当我编译这个程序时,我得到一些随机数作为输出.在Cygwin中输出为47但在RHEL5中,它给出一些负的随机数作为输出.谁能告诉我原因?
码:
main()
{
printf("%d");
}
Run Code Online (Sandbox Code Playgroud)