对于题目的疑问
查看原帖
对于题目的疑问
1148266
IceFireELSE楼主2024/8/1 10:51

题目原文: 如果vxj>vyj,他将会付给你vxj-vyj元钱; 否则,那么你需要付给商人vxj-vyj元钱。

模拟代码: ans表示钱数.

if(x > y)
    ans += x-y;
else
    ans -= x-y;

如果x>y,则x-y>0. 如果x<y,则x-y<0. 如果x<y,则-(x-y)=y-x>0. 因此"我"无论如何都是赚钱的,永远都不会付给别人钱. 除非手续费1元.

经过修改和检查,发现是题目给出的有误,

if(x > y)
    ans += x-y;	//表示钱数增加.
else
    ans += x-y;	//表示钱数减少.可以改成ans -= y-x;,效果相同.

两种情况的代码应当一样, 或者两种情况完全相反,至少不能像原题目一样.

另外还需要考虑到手续费.具体代码:

add(x,y,v[y]-v[x]+1);	//add为加边

这里的v[y]-v[x]是花费,x大时为负数赚钱,y大时为正数花钱. 这里反过来是因为我们要求的是花费而非钱数. 花费与钱数的符号正好相反.

2024/8/1 10:51
加载中...