我想找到将数组分成3个连续部分的方法的数量,使得三个部分的总和相等
-10^9 <= A[i] <= 10^9
Run Code Online (Sandbox Code Playgroud)
我的方法:输入和检查基础案例:
for(int i=0;i<n;i++){
a[i]= in.nextLong();
sum+=a[i];
}
if(sum%3!=0)System.out.println("0");
Run Code Online (Sandbox Code Playgroud)
如果答案不在上面那么形成前缀和后缀总和.
for(int i=1;i<=n-2;i++){
xx+=a[i-1];
if(xx==sum/3){
dp[i]=1;
}
}
Run Code Online (Sandbox Code Playgroud)
后缀和更新二进制索引树:
for(int i=n ;i>=3;i--){
xx+=a[i-1];
if(xx==sum/3){
update(i, 1, suffix);
}
}
Run Code Online (Sandbox Code Playgroud)
现在简单地循环数组以找到Total Ways:int ans = 0;
for(int i=1;i<=n-2;i++){
if(dp[i]==1)
{
ans+= (query(n, suffix) - query(i+1, suffix));
// Checking For the Sum/3 in array where index>i+1
}
}
Run Code Online (Sandbox Code Playgroud)
我为上述方法得到了错误的答案
我不知道我在哪里犯了错误请帮助纠正我的错误.
更新和查询功能:
public static void update(int i , int value , int[] arr){
while(i<arr.length){
arr[i]+=value;
i+=i&-i;
}
}
public static …Run Code Online (Sandbox Code Playgroud) Tere是一张大小为R×C的表格; R行和C列.该表的子矩形被阻止.我们只能向右或向下移动.在没有通过被阻挡的子矩形的情况下,从左上角单元格到右下角单元格的路径数是多少?
我的方法:
计算行r2 C = {0到c1-1}的路径和行r1的路径C = {c2 + 1,C}
r1,c1,r2和c2,左上角的单元格和下面的单元格 - 被阻止的矩形的正确单元格.
Cal Calculate C(n,k)
Run Code Online (Sandbox Code Playgroud)
我的代码:
int R = in.nextInt()-1;
int C = in.nextInt()-1;
int r1 = in.nextInt()-1;
int c1= in.nextInt()-1;
int r2 = in.nextInt()-1;
int c2 = in.nextInt()-1;
long ans=0;
long temp=0;
temp+= Cal(R-r2+C-c1,C-c1);
for(int i=0;i<c1 && r2!=R;i++){
ans+=Cal(i+r2,r2)*(Cal(R-r2+C-i,C-i)-temp);
}
temp=0;
temp+=Cal(r1+c2,r1);
for(int i=c2+1;i<=C;i++){
ans+= (Cal(i+r1,r1)-temp)*Cal(C-i+R-r1,C-i);
}
System.out.println(ans);
Run Code Online (Sandbox Code Playgroud)
我没有得到上述算法的正确答案.如果我做错了,请帮助我.
Sample input:
8 12
5 5 8 8 ANS:7008
Run Code Online (Sandbox Code Playgroud) 这是 Facebook 黑客杯中的图搜索问题。问题链接
问题描述:MXN 矩阵我们必须找到从源到目标的最小距离。在我们采取的每一步中,都有改变方向的激光和也发射激光。
问题:
我使用了在社论中描述的相同方法但是我使用了DFS 而不是 BFS并且我对某些情况的答案有误。
DFS 如何发挥作用 为什么 DFS 在 BFS 工作时没有在这方面工作。
代码链接
tHanks
Run Code Online (Sandbox Code Playgroud)