2017.10.24队内互测——压轴出场的互测终曲|(*_-)

出题人: Sherlock, Frank, WWQ, MurasameKatana
终于到了我们组出题啦.
题面都是我自己写的2333

Problem 1 :令咒

题目来源:http://codevs.cn/problem/3286/

题目描述

当你终于打通 Codevs 钻石天梯, 成为一名 Master 后。在 11 月 11 日这一天,响应万能的评测机的召唤, 加入了恢弘的魔术师战争中。
但评测机却在大战开幕前被污染了//被卡了,意外导致你手背上的令咒排列顺序被随机打乱,且形态可能也被改变。令咒表现为一长度确定的字符串 B。 而身为古老魔术家族的传人, 你发现家族世代相传的文献记载了令咒原有的模样为字符串 A, 你考虑对比两个令咒, 将你手背上的令咒修改为原有的模样, 修改规则如下:
1. 每次可以交换 B 令咒中相邻两个字符的位置。
2. 根据等价交换的准则,修改令咒会消耗魔力, 你想要使 A, B 相同,并希望交换次数最少。
3. 若无法将 B 修改为 A,输出“-1” 。
输入格式
第一行一个整数 n,表示字符串的长度
接下来两行,每行一个字符串 A, B。
输出格式
一个整数为最小交换次数(若不能交换则输出“-1”)
样例输入
5
AB?@C
A?CB@
样例输出
3
数据范围及提示
数据保证不存在重复字符
对于 20%的数据: 1<=n<=20
对于 100%的数据: 1<=n<=100
思路
NOIP2013火柴排队改编而来,并没有太大区别。
具体请见:http://blog.csdn.net/qq_36693533/article/details/78357665

Problem 2 :术式

题目来源: Tyvj P1040(加减)+P1041(高精度加减,未使用此数据),+P1042(加减乘除乘方,无括号)+P1043(有括号)。

题目描述

修改好令咒后,你来到了幽深昏暗的地下室中, 将获得的圣遗物——远古学长的笔记放于魔法阵上,铜钟般的吟唱响起, 绯红和湛蓝色光芒交替变幻…..
召唤失败。
借着笔记燃烧的火光,你看到了一行术式:
(-2^(3+2)*(1-(19-3))//此处为样例
一行存在多余字符即左括号的术式, 无法进行的计算使得法阵并没有发挥应有的效果。但召唤 servent 的术式不容修改, 你的选择只有手动计算这行术式的结果并将其加入到魔法过程中。
输入格式
一行术式,多次运行输入的术式各不相同。
输出格式
一个整数为术式计算的结果。
样例输入
(-2^(3+2)*(1-(19-3))
样例输出
480
数据范围及提示
可供使用的运算符有: +, -,*,/,^n(求 n 次方)
数据保证多余的括号只存在于术式最左边
数据保证计算过程数值小于 MAX_longlong
对于 10%的数据:运算符只存在+, -
对于另外 25%: 不存在括号
对于 100%的数据: 1<=长度<=200
思路
纯粹的表达式计算

Problem 3 :洛圣都

题目来源:http://codeforces.com/contest/867/problem/E
官方题解:http://codeforces.com/blog/entry/54888

洛圣都,一个庞大且阳光普照的繁华都市,充满了自我救赎的大师们,贪官污吏们和落魄的名人们, 一群被羡慕着的西方世界的居民却也正处于挣扎着生存的时代,衰落的经济和廉价的道义让这里混乱不堪。

题目描述

当你刚刚踏入洛圣都,就看见拉玛尔走了过来。
“哦,兄弟,见到你可真高兴。”
“来吧这里是洛圣都, 你有我罩着包你满意。”
“我们最近发现了一桩好活儿”拉玛尔无不得意的说, “我们完全掌握了一种股票的行情, 每天只需要到买倒卖,其他的什么也不做。要来试试吗?这才是文明人的赚钱方式。 ”
你可以在接下来的 N 天内完全预测某种股票的价格,你可以利用这个知识获利,但每天只能处理一份股票。 也就是说,你每天要么买一份, 要么卖一份,要么什么也不做。 最初你拥有 0 份股票,当你不拥有任何股票时,你不能出售股票。
在 N 天结束的时候, 你需要使自己手中的股票为 0, 但希望在 N 天的过程中赚到尽量多的钱。
输入格式
第一行输入一个 N 表示天数。
接下来的 N 行每行一个整数 Pi 表示第 i 天某种股票的价格。
输出格式
一个整数为赚到的最大金额。
样例输入 1
9
10 5 4 7 9 12 6 2 10
样例输出 1
20
样例输入 2
20
3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4
样例输出 2
41
数据范围及提示
数据保证结果小于 MAX_longlong
对于 30%的数据: 1<=n<=10
对于 100%的数据: 1<=n<=300000
思路
显而易见的是,对于一份可以使我们获利的股票,我们应该确定在某一天买入,再在之后的某一天卖出。
方案一:对于整个序列,线段树维护极值,每次选取两个极值计算获利。仔细思考过后会发现是错误的,反例:1 3 2 5——此种方案答案为4,实际最优答案为5。
方案二: DP,设dp[i][j]表示前i天买入(即持有)了j份股票,用前一天买入,卖出,和什么都不做的方案更新即可。正确性显然….但无法处理300000的数据,只可以得60%的分数。

代码

//DP版本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int INF = 1e9+7;
int n;
int val[100010],dp[2010][2010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&val[i]);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    dp[i][j]=-INF;
    int k;
    dp[1][0]=0;
    dp[1][1]=-val[1];//第一天无法卖出,什么也不做影响为0 
    for(int i=2;i<=n;i++)
    {
        k=min(i,n-i);//为使最后剩余股票为0,设置股票购入上限 
        for(int j=0;j<=k;j++)
        {
            dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1]-val[i],dp[i-1][j+1]+val[i]));//当天什么都不做,买入,卖出 
        }
    }
    printf("%d",dp[n][0]);//买入即持有
    return 0; 
}

方案三:
贪心——正解
首先对于第三种情况,什么都不做。我们并不需要考虑,只需根据后面的处理过程假设在这一天买入或卖出即可。
我们可以维护一个小根堆。记录当前以前的信息。
此时有这样的思路:每得到一天的价格,将当前价格与堆顶元素比较,若大于top则将其-top加入答案并弹出堆顶,若不然则加入堆中——存在反例:3 4 7
对于反例,我们会得到答案4-3=1,而实际上存在最优解7-3=4,而观察发现,7-3=(7-4)+(4-3),相当于没有用到4。也就是说“如果只考虑 a< b< c 这样的子序列, b 是用不到的, 但是在遍历到 c 之前,无法确定是否会出现这样的情况。 一旦出现这样的情况, b 对答案无影响并且 b 可能在以后用到。”
于是我们考虑在必要情况下,放入两个 b。
具体过程为:每得到一天的价格,我们便将其放入堆中,若这个价格大于堆顶原始,则将两者差值贡献给答案并弹出堆顶,然后将此价格再次放入堆中。
这样有什么作用呢?
首先当堆顶元素为a时,我们得到b,发现 b 比 a 大, 将 b-a 加入答案,同时放进去两个 b,在堆中等待被买(这个定义是不准确的,形如b的情况,但由上文推出的关系得此种情况可忽略)。
如果之后找到一个 c>b, 将 c-b 加入答案。此时的答案总和实质为:(b-a) +(c-b) =c-a,也就是说,c-a一定是比b-a更优的(因为c>b,这个策略是本题的基础)。如果后面有 f>b, 这时放入的另一个 b 就派上了用场——此时的f-b相当于之前的b-a!
将 b 放进去后,如果 b 从此以后一直是比较大的,那么之后一定不会再以 b 价格买入, b 不会成为堆顶,放进去的另一个 b 就一直不会产生影响。
这样就对每一个可以进行操作的堆顶元素在某一天执行了 的操作, 对每一个
当前遍历到的比堆顶元素大的元素在某一天执行了 的操作。
最后可能会剩下一些卖不出去的股票,相当于在当天不进行任何操作, 因此不需要考虑当前“持有”的股票数量以及如何使最后剩余的股票数为 0 的策略。
真是精妙又严谨的策略~

代码

#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
typedef unsigned long long ull;
priority_queue<int,vector<int>,greater<int> > q;//注意此处写法,greater自带从小到大的排序,为小根堆。
ull ans;
int main()
{
    int n,x;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&x);
        if(!q.empty()&&q.top()<x)
        {
            ans+=x-q.top();
            q.pop();
            q.push(x);
        }
        q.push(x);
    }
    printf("%I64u",ans);
    return 0;
}

Problem 4 : 星际牛仔

题目来源:http://www.usaco.org/index.php?page=viewproblem2&cpid=575
该网站不提供在线测评,仅提供数据下载。考试使用原数据。

“就像做梦一样呢…”
“嗯.一场噩梦罢了。”

题目描述

当 Spike 只身杀入红龙总部,寻找着宿敌 Vicious 时,遇到了过去组织中好友
林的弟弟真。
真告诉 Spike 了 Vicious 的地点,在总部大厦的最顶层。 想要到达那里则必须经过面前的迷宫防御系统——迷宫如真手中的地图所示:
在一张 N×M 格的矩形迷宫中, Spike 开始时从左上角的格子进入迷宫,出口则位于右下角的格子。当处于迷宫中时, 可以选择上, 下,左, 右四个方向移动到相邻的格子中。
可是等等!迷宫中的每一个格子都有一种颜色, 每种颜色代表不同的属性!
• 如果格子是红色的, 说明有红龙干部镇守, 是无法通行的。
• 如果格子是粉红色的,则可以正常行走。
• 如果格子是橙色的, 为红龙干部确认没有入侵者的区域。 可以正常行走,且经过者会被染上安全标记。
• 如果格子是蓝色的, 为特殊通行区域,仅允许染有安全标记的人通过。
• 如果格子是紫色的, 为快速通行区域, Spike 将沿该方向滑动到下一个格子(除非他无法穿过)。如果这个格子也是一个紫色的格子,那么将继续滑动,直到他落在一个非紫色的格子上,或者击中一个无法通行的格子。 同时,若经过紫色的格子,则会清除身上的安全标记。
(如果你对紫色格子感到困惑,下面的样例将说明它们的用途。)
请帮助 Spike 经尽可能少的移动步数从左上角到达右下角。
输入格式
第一行有两个整数 N 和 M, 表示迷宫的行数(rows) 和列数(columns)。
接下来的 N 行每行各有 M 个整数, 代表迷宫。
• “0”代表是一个红色的格子
• “1”代表是一个粉红色的格子
• “2”代表是一个橙色的格子
• “3”代表是一个蓝色的格子
• “4”代表是一个紫色的格子
左上角和右下角的整数将始终为“1”。
输出格式
一个整数,代表 Spike 必须用来穿过迷宫的最小移动步数,如果不可能穿过,
则输出“-1” 。
样例输入
4 4
1 0 2 1
1 1 4 1
1 0 4 0
1 3 1 1
样例输出
10
样例说明
在这个例子中, Spike 向下走一个格子,向右走两个格子(然后向右滑动一个
格子)。他向上走一个格子,向左走一格,向下走一格(再往下滑两个方块),
再向左走一格。这共有 10 个动作(DRRRULDDDR)。
数据范围及提示
对于 100%的数据: 1<=n,m<=1000
思路
BFS…代码等等写

没错还有——
耗费了很多时间精心制作却没人做的原创T5…

Problem 5 :胧村正

题目来源:原创

这个世界中有数把妖刀,那是一旦被拔出来就必须要吸血的刀。那是元禄年间,将军德川纲吉统治的时代。原本充满神气的名刀长时间被充满憎恨的血潮所侵染从而转化为充满阴气与妖气的妖刀,太平盛世下的烟云下,围绕妖刀进行争斗的人们,其欲望、仁义、迷惘、纷争引来了魑魅魍魉[chī mèi wǎng liǎng],将龙神鬼神也卷入了战火的劫难之中。
胧夜千十的高徒, 灵魂误入百姬身体饭纲阵九朗为寻找恢复原状的方法而踏上
前往信浓的道路。
怪僧:「阵九朗…国内到处都有护法的结界。你已经无处可逃了,我要代替诸佛,惩罚你恶逆无道的行径!」

题目描述

现在阵九郎行至甲斐, 怪僧在甲斐通往信浓的道路上设置了一个结界, 结界有一定的初始防御值, 使用两把妖刀施展二天一流剑技(Star Burst Stream)可以降低结界防御值, 只有将结界防御值降低到特定的临界防御值才可以破坏结界。妖刀可以到周围的城镇收集(甲斐不存在妖刀), 部分城镇也不存在妖刀。城镇由若干条道路连接, 道路两端的城镇可通过这条道路相互到达。 每把妖刀各不相同,一把妖刀单次攻击可以减少结界特定的防御值,减少量为妖刀的攻击力, 每次使用妖刀会使妖刀的磨损值减少, 减少量为妖刀的韧度。当磨损值小于 0 时妖刀将折断无法再次使用。
部分妖刀存在瑕疵,使用此种妖刀攻击结界反而会使结界防御值增加。
阵九郎答应用黑光太刀做报酬, 首先请你帮忙确定两个城镇,使得从甲斐出发经过尽量短的路程之和,若路程相同则按序号排序, 找到城镇中的两把妖刀,且选择城镇中的妖刀在各使用一定次数后可以破坏结界。同时, 妖刀作为罕见的珍宝,阵九郎希望在使用这两把妖刀破坏结界时消耗的磨损值之和尽量小,如果预测一把妖刀将中途折断且之后将无法破坏结界, 他将适当减少此妖刀的使用次数(即不会选择使妖刀折断的方案), 若无论如何调整都无法破坏结界,他将把这两把妖刀都舍弃而到另外两个距甲斐路程之和次小的城镇寻找新的两把妖刀使用, 以此类推。 请你计算结界被破坏后使用的两把妖刀各自的消耗的磨损值
注:信浓并不在给出城镇中, 且给出的城镇不一定均可到达。
路程之和的定义为: 从起点分别到两点的距离相加
两把妖刀都必须至少使用一次。
输入格式
首先输入 1 行 4 个整数 n,m,h,p 表示城镇总数(甲斐的编号为 1),道路总数,结界初始防御值及结界临界防御值。
接下来 m 行,每行 3 个整数 u,v,w 表示 u,v 之间存在一条长度为 w 的道路。
接下来 n 行,每行 4 个整数 ci,ri,mi,ti 表示编号为 i 的城镇中妖刀的攻击力, 韧度,初始磨损值及是否存在瑕疵。完美的妖刀 ti 为 0,存在瑕疵的妖刀ti 为 1,不存在妖刀的城镇 ci,ri,mi,ti 都为 0
输出格式
输出共 1 行, 2 个整数 a,b(a< b) 表示在满足“路程之和尽量小的情况下, 使妖刀消耗的磨损值之和尽量小” 的条件,使用两把妖刀破坏结界后,各自消耗的磨损值。
若存在多解,输出两把妖刀消耗磨损值相差最小的一组解
若搜遍周围城镇也无法破坏结界,则输出“Game over”
样例输入
6 6 20 2
1 2 3
2 3 2
1 3 7
2 4 1
3 5 4
5 6 2
0 0 0 0
0 0 0 0
5 2 11 0
10 3 10 0
2 1 6 04 4 15 0
样例输出
5 8
数据范围及提示
对于 30%的数据: 1<=n,m<=40000
对于 100%的数据: 1<=n, m<=200000,
1<=ci<=10000,1<=ri<=1000,1<=mi<=10000
附真实地图,与题目无关。
这里写图片描述

思路
首先我们将起点到所有城镇的距离排序,每次选取存在妖刀且路程之和为当前最小的两个城镇中的妖刀,取其攻击力a b结界初始防御值-临界防御值c,那么两把妖刀各自的使用次数方程的解x,y
那么我们首先通过exgcd()求出一组特解满足ax + by = gcd(a,b)
注:exgcd()求出的特解为 |x| + |y| 最小的一组解
然后得到满足ax + by = c的解,再推导其他的解找到:
两个使用次数大于0,使用方案不会使任意一把妖刀折断,且消耗的磨损值之和最小的解。
然后就是注意细节处理——这个解枚举的边界判断很麻烦….具体请看代码。
欧几里得及拓展欧几里得算法详解请见:
http://blog.csdn.net/qq_36693533/article/details/78360487

这个题他们都只输出了“Game over”,然而我们造数据时忘了给这个的分了2333

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define RI register int
using namespace std;
typedef long long ll;
const int INF =1000000007;
ll n,m,h,p,ru,rv,rw,tot,x,y,xs,ys,ans,anz,A,Z,minx,f;
ll dis[100010],first[200010],nxt[200010];
ll c[100010],r[100010],k[100010],t[100010],num[100010];
bool flag;
bool inq[100010],unb[100010];
struct edge
{
    ll u,v,w;
}l[400010];
queue<int>q;
inline bool cmp(ll a,ll b)
{
    if(dis[a]!=dis[b])
    return dis[a]<dis[b];
    else return a<b;
}
inline void build(ll f,ll t,ll c)
{
    l[++tot]=(edge){f,t,c};
    nxt[tot]=first[f];
    first[f]=tot;
}
inline bool check_1(ll a,ll b,ll c)//分情况讨论边界条件 
{
    if(a>0&&b>0)//此时xs只会减少,ys只会增加 
    {
        if(xs<=0||ys>(k[num[c]]/r[num[c]]))//继续推导不可能得到合法答案 
        return 0;
    }
    else if(a>0&&b<0)//此时xs和ys都只会增加 
    {
        if(xs>(k[num[c-1]]/r[num[c-1]])||ys>(k[num[c]]/r[num[c]]))
        return 0;
    }
    else if(a<0&&b>0)//此时xs和ys都只会减少 
    {
        if(xs<=0||ys<=0)
        return 0;
    }
    else if(a<0&&b<0)//此时xs只会增加,ys只会减少 
    {
        if(xs>(k[num[c]]/r[num[c]])||ys<=0)
        return 0;
    }
    return 1;
}
inline bool check_2(ll a,ll b,ll c)
{
    if(a>0&&b>0)//此时xs只会增加,ys只会减少 
    {
        if(xs>(k[num[c-1]]/r[num[c-1]])||ys<=0)
        return 0;
    }
    else if(a>0&&b<0)//此时xs和ys都只会减少 
    {
        if(xs<=0||ys<=0)
        return 0;
    }
    else if(a<0&&b>0)//此时xs和ys都只会增加 
    {
        if(xs>(k[num[c-1]]/r[num[c-1]])||ys>(k[num[c]]/r[num[c]]))
        return 0;
    }
    else if(a<0&&b<0)//此时xs只会减少,ys只会增加 
    {
        if(xs<=0||ys>(k[num[c]]/r[num[c]]))
        return 0;
    }
    return 1;
}
inline void SPFA()
{
    for(RI i=1;i<=n;i++)
    dis[i]=INF;
    dis[1]=0;
    q.push(1);
    inq[1]=1;
    while(!q.empty())
    {
        int k=q.front();
        q.pop();
        inq[k]=0;
        for(RI i=first[k];i!=-1;i=nxt[i])
        {
            ll x=l[i].v;
            if(dis[x]>dis[k]+l[i].w)
            {
                dis[x]=dis[k]+l[i].w;
                if(!inq[x])
                {
                    q.push(x);
                    inq[x]=1;
                }
            }
        }
    }
}
inline ll exgcd(ll a,ll b,ll &x,ll &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    ll d=exgcd(b,a%b,x,y);
    ll t=x;
    x=y;
    y=t-a/b*y;
    return d;
}
int main()
{
    memset(first,-1,sizeof(first));
    scanf("%lld%lld%lld%lld",&n,&m,&h,&p);
    for(RI i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&ru,&rv,&rw);
        build(ru,rv,rw);
        build(rv,ru,rw);
    }
    for(RI i=1;i<=n;i++)
    {
        scanf("%lld%lld%lld%lld",&c[i],&r[i],&k[i],&t[i]);
        if(t[i]==1)
        c[i]*=-1;
        if(!c[i]&&!r[i]&&!k[i]&&!t[i])
        unb[i]=1;
    }
    SPFA();
    for(RI i=1;i<=n;i++)
    if(unb[i]==1)
    dis[i]=INF;
    for(RI i=1;i<=n;i++)
    num[i]=i;
    sort(num+1,num+n+1,cmp);//给城镇排序 
    minx=1e9+7;
    for(RI i=2;i<=n;i+=2)
    {
        if(unb[num[i-1]]||unb[num[i]])//若搜遍周边城镇也没有找到 
        break;
        ll d=exgcd(c[num[i-1]],c[num[i]],x,y);//ax+by=gcd(a,b) 
        if(!d||(h-p)%d!=0)//%0RE 若无解 
        continue;
        ll s=(h-p)/d;//asx+bsy=c 
        x*=s;
        y*=s;
        int li=x;
        int lr=y;
        for(RI j=0;;j++)//j>=0 
        {
            xs=x-(c[num[i]]/d)*j;//xs=x-b/d*j
            ys=y+(c[num[i-1]]/d)*j;//ys=y+a/d*j
            if(!check_1(c[num[i-1]]/d,c[num[i]]/d,i))
            break;
            if(xs>0&&ys>0&&xs<=(k[num[i-1]]/r[num[i-1]])&&
            ys<=(k[num[i]]/r[num[i]]))//合法情况,使用次数大于0且未达次数上限 
            {
                if(((xs*r[num[i-1]]+ys*r[num[i]])<minx)||
                (A!=0&&Z!=0&&(xs*r[num[i-1]]+ys*r[num[i]]==minx)&&
                (abs(xs*r[num[i-1]]-ys*r[num[i]])<
                abs(A*r[num[i-1]]-Z*r[num[i]]))))//取磨损值消耗之和最小的方案 
                {//若存在多解取磨损值相差最小的 
                    minx=(xs*r[num[i-1]]+ys*r[num[i]]);
                    A=xs;
                    Z=ys;
                    flag=1;//存在合法解
                }
            }
        }
        x=li;
        y=lr;
        for(RI j=-1;;j--)//j<0
        {
            xs=x-(c[num[i]]/d)*j;
            ys=y+(c[num[i-1]]/d)*j;//x为大正数,y为大负数的情况不会导致非法退出
            if(!check_2(c[num[i-1]]/d,c[num[i]]/d,i))
            break;
            if(xs>0&&ys>0&&xs<=(k[num[i-1]]/r[num[i-1]])&&
            ys<=(k[num[i]]/r[num[i]]))
            {
                if(((xs*r[num[i-1]]+ys*r[num[i]])<minx)||
                (A!=0&&Z!=0&&(xs*r[num[i-1]]+ys*r[num[i]]==minx)&&
                (abs(xs*r[num[i-1]]-ys*r[num[i]])<
                abs(A*r[num[i-1]]-Z*r[num[i]]))))
                {
                    minx=(xs*r[num[i-1]]+ys*r[num[i]]);
                    A=xs;
                    Z=ys;
                    flag=1;
                }
            }
        }
        if(flag)
        {
            ans=min(A*r[num[i-1]],Z*r[num[i]]);//统计 
            anz=max(A*r[num[i-1]],Z*r[num[i]]);
            break;
        }
    }
    if(flag)
    {
        printf("%lld %lld\n",ans,anz);
    }
    else printf("Game over\n");
    return 0;
}

队内互测结束啦,之后就是各地模拟和清北模拟题了….这周好像还会有和章丘四中的互测…让人期待啊~
祝我们NOIPRP++.
Thank You for Watching !

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值