萌新的比赛复盘 - 5月下月刊

休息了几天回来了 离省赛越来越近了感觉自己还是好菜

The 19th Heilongjiang Provincial Collegiate Programming Contest

先吃一场石 三个人打得想似

I. This is an easy problem

题如其名 幽默签到题 直接调函数

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",__builtin_popcount(n));
    }
    return 0;
}

B. String

压栈维护 遇到三个就弹 队长的马蜂还是太现代了(

#include<bits/stdc++.h>

using i64 = long long;

int main(void) {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	auto solve = [&]() {
		std::string s;
		std::cin >> s;
		std::vector<char> st;
		int n = s.length();
		for (char c : s) {
			st.push_back(c);
			int l = st.size();
			if (l >= 3 and  st[l - 2] == st[l - 3] and c == st[l - 1] and c == st[l - 2]) {
				st.pop_back();
				st.pop_back();
				st.pop_back();
			}
		}

		if (st.empty()) {
			std::cout << "NAN\n";
			return ;
		}

		for (char c : st) {
			std::cout << c;
		}
		std::cout << '\n';
	};

	int t = 1;
	// std::cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

K. Puzzle

24点 给你4张牌,不含括号,三个符号,加减乘随意排列组合,能有多少种答案

强行遍历,也就最多7^7 开个set就行

#include <bits/stdc++.h>

using i64 = long long;

int main(void) {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::vector<int> a(4);
    for (int i = 0; i < 4; i += 1) {
        std::cin >> a[i];
    }

    std::ranges::sort(a);

    std::set<int> s;

    auto cal = [&](int x, int y, int o) {
        if (o == 1) {
            return x + y;
        } else if (o == 2) {
            return x - y;
        } else if (o == 3) {
            return x * y;
        }
    };

    int c = 0;

    do {
        for (int i = 1; i <= 3; i += 1) {
            for (int j = 1; j <= 3; j += 1) {
                for (int k = 1; k <= 3; k += 1) {
                    std::vector<int> nst, fst;
                    nst.push_back(a[0]);
                    if (i == 3) {
                        nst.pop_back();
                        nst.push_back(a[0] * a[1]);
                    } else {
                        fst.push_back(i);
                        nst.push_back(a[1]);
                    }
                    if (j == 3) {
                        //                        int now = nst.pop_back();
                        int now = nst.back();
                        nst.pop_back();
                        nst.push_back(now * a[2]);
                    } else {
                        fst.push_back(j);
                        nst.push_back(a[2]);
                    }
                    if (k == 3) {
                        //                        int now = nst.pop_back();
                        int now = nst.back();
                        nst.pop_back();
                        nst.push_back(now * a[3]);

                    } else {
                        fst.push_back(k);
                        nst.push_back(a[3]);
                    }
                    int j = 0, ret = nst[0];
                    for (int i = 1; i < nst.size(); i++) {
                        if (fst[j] == 1)
                            ret += nst[i];
                        else
                            ret -= nst[i];
                        j++;
                    }
                    s.insert(ret);
                }
            }
        }
    } while (std::next_permutation(a.begin(), a.end()));
//    for (const auto &c: s) {
//        std::cerr << c << "\n";
//    }
    std::cout << (s.size()) << "\n";
    return 0;
}

D. Card Game

打牌 杀闪 问A有没有机会赢

很好想 B一直犯蠢就行 闪全用在低攻击牌上 而A则是魔法对轰

#include <bits/stdc++.h>

#define int long long

// Sleep in half the day just for old times' sake
// I won't ask you to wait if you don't ask me to stay

void Excalibur() {
  int n, hpa, hpb;
  std::cin >> n >> hpa >> hpb;
  std::vector<int> a(n), b(n);
  for (int &i : a) std::cin >> i;
  for (int &i : b) std::cin >> i;
  // std::ranges::sort(a);
  std::ranges::sort(b, std::greater());
  // int l = std::ranges::count(a, -1);
  int r = std::ranges::count(b, -1);

  std::ranges::sort(a, std::greater());

  // std::reverse(a.begin() + l, a.end());
  std::reverse(b.begin(), b.end() - r);

  // std::cout << "a:";
  // for (int i : a) std::cout << i << ' ';
  // std::cout << '\n';
  // std::cout << "b:";
  // for (int i : b) std::cout << i << ' ';
  // std::cout << '\n';

  for (int i = 0; i < n; ++i) {
    if (a[i] == -1 or b[i] == -1) continue;
    hpa -= b[i];
    hpb -= a[i];
    if (hpa <= 0) {
      std::cout << "no\n";
      return;
    }
    if (hpb <= 0) {
      break;
    }
  }
  if (hpb > 0) {
    std::cout << "no\n";
    return;
  }
  std::cout << "yes\n";
}

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);

  int t;
  std::cin >> t;
  while (t--) Excalibur();

  return 0;
}

J. Trade

很传统的方格dp 区别就是一旦不满足条件就把路堵死(设为无穷) 有点像剪枝 记得初始化

#include <bits/stdc++.h>

using i64 = long long;

int main(void) {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	int n, m;
	std::cin >> n >> m;

	std::vector a(n + 1, std::vector<i64>(m + 1));
	std::vector b(n + 1, std::vector<i64>(m + 1));
	for (int i = 1; i <= n; i += 1) {
		for (int j = 1; j <= m; j += 1) {
			std::cin >> a[i][j];
		}
	}
	for (int i = 1; i <= n; i += 1) {
		for (int j = 1; j <= m; j += 1) {
			std::cin >> b[i][j];
		}
	}

	std::vector f(n + 1, std::vector<i64>(m + 1));
	for (int j = 0; j <= m; j += 1) {
		f[0][j] = LLONG_MAX / 2;
	}
	for (int j = 0; j <= n; j += 1) {
		f[j][0] = LLONG_MAX / 2;
	}
	f[1][1] = b[1][1];
	for (int i = 1; i <= n; i += 1) {
		for (int j = 1; j <= m; j += 1) {
			if (i != 1 or j != 1) {
				f[i][j] = std::min(f[i][j - 1], f[i - 1][j]) + b[i][j];
			}
		}
	}




	std::vector g(n + 1, std::vector<i64>(m + 1, LLONG_MAX / 2));
	for (int i = 1; i <= n; i += 1) {
		for (int j = 1; j <= m; j += 1) {
			if (i != 1 or j != 1) {
				if (f[i][j] + a[1][1] <= a[i][j]) {
					g[i][j] = f[i][j];
				}
			}
		}
	}
	for (int j = 1; j <= n; j += 1) {
		if (g[j][m] != LLONG_MAX / 2) {
			std::cout << "YES\n";
			return 0;
		}
	}
	for (int j = 1; j <= m; j += 1) {
		if (g[n][j] != LLONG_MAX / 2) {
			std::cout << "YES\n";
			return 0;
		}
	}
	std::cout << "NO\n";
	return 0;
}

The 2023 Guangdong Provincial Collegiate Programming Contest

听队长说这个题目出的很好 遂与家猫共vp跨520

A. Programming Contest

签到题 比前面那个有含金量

#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PLL;
#define qwq ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10;

LL read()
{
    LL sum = 0, fl = 1;
    int ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            fl = -1;
    for (; isdigit(ch); ch = getchar())
        sum = sum * 10 + ch - '0';
    return sum * fl;
}
LL a[N];
void solve()
{
    LL y1 = read();
    LL n = read();
    for (int i = 1; i <= n; i++)
        a[i] = read();
    LL y2 = read();
    LL cnt = 0;
    for (int i = 1; i <= n; i++)
    {
        if (y2 > a[i])
            cnt++;
        else
            break;
    }
    // printf("%lld\n", cnt);
    printf("%lld\n", y2 - y1 + 1 - cnt);
}

int main()
{
    LL t = read();
    while (t--)
        solve();
    return 0;
}

C. Trading

北京路发家致富贪心之旅 就排序 最便宜的地方买最贵的地方卖跑一遍

#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PLL;
#define qwq ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10;

LL read()
{
    LL sum = 0, fl = 1;
    int ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            fl = -1;
    for (; isdigit(ch); ch = getchar())
        sum = sum * 10 + ch - '0';
    return sum * fl;
}

PLL a[N]; // val num

void solve()
{
    LL n = read();
    for (int i = 1; i <= n; i++)
        a[i].first = read(), a[i].second = read();
    sort(a + 1, a + 1 + n);
    LL l = 1, r = n;
    LL ans = 0;
    while (l < r)
    {
        LL num = min(a[l].second, a[r].second);
        ans += (a[r].first - a[l].first) * num;
        a[l].second -= num;
        a[r].second -= num;
        if (a[l].second <= 0)
            l++;
        if (a[r].second <= 0)
            r--;
    }
    printf("%lld\n", ans);
}

int main()
{
    qwq;
    LL t = read();
    while (t--)
        solve();
    return 0;
}

D. New Houses

安排新家 还是贪心 但是特判情况有点多

#include <bits/stdc++.h>
#define int long long
using namespace std;
struct q{
    int a;
    int b;
};
bool cnmp(q x,q y)
{
    return x.b-x.a<y.b-y.a;
}
signed main()
{
    int T=1;
    scanf("%lld",&T);
    while(T--)
    {
        int n,m;
        scanf("%lld%lld",&n,&m);
        q all[n];
        for(int i=0;i<n;i++)
        {
            scanf("%lld%lld",&all[i].a,&all[i].b);
        }
        sort(all,all+n,cnmp);
        int suma[n],sumb[n];
        suma[0]=all[0].a;
        sumb[0]=all[0].b;
        for(int i=1;i<n;i++)
        {
            suma[i]=suma[i-1]+all[i].a;
            sumb[i]=sumb[i-1]+all[i].b;
        }
        int ans;
        if(2*n-1<=m)
        {
            ans=sumb[n-1];
        }
        else
        {
            ans=0;
        }
        for(int i=1;i<n;i++)
        {
            if(2*n-1-i<=m)
            {
                ans=max(ans,suma[i]+sumb[n-1]-sumb[i]);
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}

I. Path Planning

狂WA11发 最后同一个思路重构一下就过了 真的是...不理解

想要MEX值尽可能大 那我就按顺序把0,1,2,3...全部找出来看能不能连到一条线上 找不到的最小值就是我想要的答案 所以自然能够想到需要考虑二分

那么具体如何判断呢? 经过任意一个点的路径都不可能经过他右上角和左下角的任意格子,所以对于一个数能不能上路,就遍历所有小于它的数对应的点,他都要在他们的右下角或左下角,这也就是我们需要的check函数

#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PLL;
#define qwq ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10;

LL read()
{
    LL sum = 0, fl = 1;
    int ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            fl = -1;
    for (; isdigit(ch); ch = getchar())
        sum = sum * 10 + ch - '0';
    return sum * fl;
}
LL n, m;
map<PLL, LL> a;

int check(LL mid)
{
    LL nowy = 0;
    // 直往右
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
        {
            if (a[{i, j}] <= mid)
            {
                if (j < nowy)
                    return 0;
                nowy = max(nowy, (LL)j);
            }
        }
    return 1;
}

void solve()
{
    a.clear();
    n = read(), m = read();
    // LL a[n + 10][m + 10] = {0};
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            a[{i, j}] = read();

    LL l = 0, r = n * m;
    while (l < r)
    {
        LL mid = l + r + 1 >> 1;
        if (check(mid))
            l = mid;
        else
            r = mid - 1;
    }
    printf("%lld\n", min(l + 1, m + n - 1));
}

int main()
{
    qwq;
    LL t = read();
    while (t--)
        solve();
    return 0;
}

K. Peg Solitaire

一开始题意理解错了 以为跳几个都行 要不然应该很早就ac了的 后来队友提醒才发现 那就好办了 直接照题意dfs一下就行了 算是板子题了 相当简单

#include <bits/stdc++.h>

using namespace std;
int n,m,k;
int mp[10][10]={0};
int ans=INT_MAX;
void dfs(int t)
{
    ans=min(ans,t);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(mp[i][j]==1)
            {
                //往右跳
                if(j+2<=m&&mp[i][j+1]==1&&mp[i][j+2]==0)
                {
                    mp[i][j]=0;
                    mp[i][j+1]=0;
                    mp[i][j+2]=1;
                    dfs(t-1);
                    mp[i][j]=1;
                    mp[i][j+1]=1;
                    mp[i][j+2]=0;
                }
                if(j-2>=1&&mp[i][j-1]==1&&mp[i][j-2]==0)
                {
                    mp[i][j]=0;
                    mp[i][j-1]=0;
                    mp[i][j-2]=1;
                    dfs(t-1);
                    mp[i][j]=1;
                    mp[i][j-1]=1;
                    mp[i][j-2]=0;
                }
                if(i-2>=1&&mp[i-1][j]==1&&mp[i-2][j]==0)
                {
                    mp[i][j]=0;
                    mp[i-1][j]=0;
                    mp[i-2][j]=1;
                    dfs(t-1);
                    mp[i][j]=1;
                    mp[i-1][j]=1;
                    mp[i-2][j]=0;
                }
                if(i+2<=n&&mp[i+1][j]==1&&mp[i+2][j]==0)
                {
                    mp[i][j]=0;
                    mp[i+1][j]=0;
                    mp[i+2][j]=1;
                    dfs(t-1);
                    mp[i][j]=1;
                    mp[i+1][j]=1;
                    mp[i+2][j]=0;
                }
            }
        }
    }
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        memset(mp,0,sizeof(mp));
        ans=INT_MAX;
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i<k;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            mp[a][b]=1;
        }
        dfs(k);
        printf("%d\n",ans);
    }
    return 0;
}

Codeforces Round 946 (Div. 3)

赤石场 就做出来两题 剩下的都是感觉能写但是写出来不对的 回头慢慢补 这一场想办法吃透

A. Phone Desktop

顺序结构例题 不多说

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int ret=b/2;
        if(b%2==1)
            ret++;
        int also=ret*15-b*4;
        if(also<a)
        {
            ret+=(a-also)/15;
            if((a-also)%15!=0)
                ret++;
        }
        printf("%d\n",ret);
    }
    return 0;
}

B. Symmetric Encoding

发现加密后的字符串与原本的字符串的中间字符串r是相同的 那就原路返回即可

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        string s;
        cin>>s;
        int bl[170]={0};
        for(int i=0;i<n;i++)
        {
            bl[s[i]]++;
        }
        vector<char> r;
        for(int i='a';i<='z';i++)
        {
            if(bl[i]>0)
            {
                r.push_back(i);
            }
        }
        int all=r.size();
        map<char,char> mp;
        for(int i=0;i<all;i++)
        {
            mp[r[i]]=r[all-1-i];
        }
        for(int i=0;i<n;i++)
        {
            s[i]=mp[s[i]];
        }
        cout<<s<<endl;
    }
    return 0;
}

C. Beautiful Triple Pairs

这题真的是很诡异 我甚至在想要不要dp 最后是特别抽象的开六个桶 空间居然不爆

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        int a[n]={0};
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        long long ans=0;
        map<pair<int,int>,int> ab,bc,ac;
        map<tuple<int,int,int>,int> ab3,bc3,ac3;
        for(int i=0;i<n-2;i++)
        {
            ab[{a[i],a[i+1]}]++;bc[{a[i+1],a[i+2]}]++;ac[{a[i],a[i+2]}]++;//记录所有有两个数相同的情况
            ab3[{a[i],a[i+1],a[i+2]}]++;
            bc3[{a[i],a[i+1],a[i+2]}]++;
            ac3[{a[i],a[i+1],a[i+2]}]++;//记录三个数相同的情况用来进一步限制
            ans+=ab[{a[i],a[i+1]}]-ab3[{a[i],a[i+1],a[i+2]}];
            ans+=bc[{a[i+1],a[i+2]}]-bc3[{a[i],a[i+1],a[i+2]}];
            ans+=ac[{a[i],a[i+2]}]-ac3[{a[i],a[i+1],a[i+2]}];
        }
        printf("%lld\n",ans);
    }
    return 0;
}

D. Ingenuity-2

这题更可惜 是不是NO我已经盘清楚了 可惜赛事没想到到底要怎么分配 后来发现同一个指令轮流分配就可以了

至于具体特判什么 看代码就知道了

#include <bits/stdc++.h>

using namespace std;

void fuck()
{
    int n;
    scanf("%d",&n);
    string s;
    cin>>s;
    if(n==2)
    {
        if(s[0]!=s[1])
        {
            printf("NO\n");
            return ;
        }
        else
        {
            printf("RH\n");
            return ;
        }
    }
    int bl[226]={0};
    for(int i=0;i<n;i++) bl[s[i]]++;
    int a=bl['N']+bl['S'];
    int b=bl['E']+bl['W'];
    if(a%2==0&&b%2==0)//这些情况都必定可以 只要轮流分配即可
    {
        map<char,int> mp;
        for(int i=0;i<n;i++)
        {
            mp[s[i]]++;
            if(mp[s[i]]&1)
            {
                if(s[i]=='N'||s[i]=='S')
                    printf("R");
                else
                    printf("H");
            }
            else
            {
                if(s[i]=='N'||s[i]=='S')
                    printf("H");
                else
                    printf("R");
            }
        }
        printf("\n");
    }
    else
        printf("NO\n");
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        fuck();
    }
    return 0;
}

E. Money Buys Happiness

很明显能看出来是一道dp 钱的数字过大 那很自然看到他说快乐值和不大于1e5那就是二维dp[m][sumh] 然后就照题意维护即可

对于这个dp数组 dp[i][j]表示第i月时幸福值为j的最小代价 那么转移方式也就很清楚了

到第i月已有j快乐值时的最少话费为dp[i][j] 如果在这个值的基础上加上这个月如果买快乐花费的钱还是不大于之前的总工资(i-1)*x的话就进去递推 即到这个月的时候有

dp[i-1][j-h[i]]+c[i]<=(i-1)*x

那么就可以用递推公式

dp[i][j]=min(dp[i-1][j-h[i]]+c[i],dp[i-1][j])

可以看到i可以省略变成一维 但是我懒得写了 就这个二维吧

#include <bits/stdc++.h>

using namespace std;
typedef long long i64;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        i64 m,x;
        scanf("%lld%lld",&m,&x);
        int c[m+1],h[m+1],sumh=0;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&c[i],&h[i]);
            sumh+=h[i];
        }
        i64 dp[m+5][sumh+5];
        memset(dp,1e18,sizeof(dp));
        dp[0][0]=0;
        i64 ans=0;
        for(int i=1;i<=m;i++)
        {
            for(int j=sumh;j>=h[i];j--)//注意遍历顺序
            {
                if((i-1)*x>=dp[i-1][j-h[i]]+c[i])
                {
                    dp[i][j]=min(dp[i-1][j],dp[i-1][j-h[i]]+c[i]);
                    ans=max(ans,(i64)j);
                }
                else
                    dp[i][j]=dp[i-1][j];//不要忘了不符合条件也要转移上次的条件
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}

G. Money Buys Less Happiness Now

先看这个G 早知道就从后往前开了 这题和上次那个女巫喝药那个没啥区别 后悔贪心

女巫喝药看五月上月刊 这题也是类似 先每个都买 等没钱了就把之前买的最贵的吐出来 用一个优先队列就可以搞定

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        int m,x;
        scanf("%d%d",&m,&x);
        priority_queue<int> q;
        int c[m];
        for(int i=0;i<m;i++)
        {
            scanf("%d",&c[i]);
        }
        int p=0;
        int cnt=0;
        for(int i=0;i<m;i++)
        {
            p-=c[i];
            q.push(c[i]);
            cnt++;
            while(p<0)
            {
                int now=q.top();
                cnt--;
                p+=now;
                q.pop();
            }
            p+=x;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

F. Cutting Game

两道简单题放后面 赛时根本没看 这题也很简单 开set模拟就行了

#include <bits/stdc++.h>

using namespace std;

void solve()
{
    int A, B, N, M;
    scanf("%d%d%d%d",&A,&B,&N,&M);
    set<pair<int, int>> xy, yx;
    for (int i = 0; i < N; i++)
    {
        int x, y;
        scanf("%d%d",&x,&y);
        xy.insert({x, y});
        yx.insert({y, x});
    }
    array<int, 2> scores = {0, 0};
    int row_lo = 1, row_hi = A;
    int col_lo = 1, col_hi = B;
    for (int m = 0; m < M; m++)
    {
        char c;
        int k;
        cin >> c >> k;
        if (c == 'U')
        {
            while (!xy.empty() && xy.begin()->first < row_lo + k)
            {
                yx.erase({xy.begin()->second, xy.begin()->first});
                xy.erase(xy.begin());
                scores[m % 2]++;
            }
            row_lo += k;
        }
        else if (c == 'D')
        {
            while (!xy.empty() && xy.rbegin()->first > row_hi - k)
            {
                yx.erase({xy.rbegin()->second, xy.rbegin()->first});
                xy.erase(prev(xy.end()));
                scores[m % 2]++;
            }
            row_hi -= k;
        }
        else if (c == 'L')
        {
            while (!yx.empty() && yx.begin()->first < col_lo + k)
            {
                xy.erase({yx.begin()->second, yx.begin()->first});
                yx.erase(yx.begin());
                scores[m % 2]++;
            }
            col_lo += k;
        }
        else if (c == 'R')
        {
            while (!yx.empty() && yx.rbegin()->first > col_hi - k)
            {
                xy.erase({yx.rbegin()->second, yx.rbegin()->first});
                yx.erase(prev(yx.end()));
                scores[m % 2]++;
            }
            col_hi -= k;
        }
    }
    cout << scores[0] << ' ' << scores[1] << '\n';
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

The 22nd Sichuan University Programming Contest

奔着中文题面来的 在你们川大520恶趣味的校赛里狠狠栽了个狗啃石(点了杯奶茶还没配吸管)

赛后补题发现cf上还没有官方题解 遂潜入川大ACM群偷了出来

M. 石子游戏

开局guess直接判断奇偶WA了一发 然后证明了半个小时得出结论:小于4要特判

#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PLL;
#define qwq ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10;
#define endl "\n"

LL read()
{
    LL sum = 0, fl = 1;
    int ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            fl = -1;
    for (; isdigit(ch); ch = getchar())
        sum = sum * 10 + ch - '0';
    return sum * fl;
}

void solve()
{
    LL x = read();
    // if(x==2)
    //     printf("Bob\n");
    // else
    //     printf("Alice\n");
    if(x==1)
        printf("Alice\n");
    else if(x==2)
        printf("Bob\n");
    else if(x==3)
        printf("Alice\n");
    else if(x%2==0)
        printf("Alice\n");
    else
        printf("Bob\n");
}

int main()
{
    LL t = read();
    while (t--)
        solve();
    return 0;
}

B. 问路

虽然我也不知道赛时为什么把我硬控死在这题了 但是看完题解上简明扼要的“略”之后脑子突然转回来了 一开始一直想把跑太远翻到地球背面单独讨论 后来发现并不用 其实算法没差

#include <bits/stdc++.h>
#define PI 3.1415926535897932384626//只背到这一位
using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        double R,X;
        scanf("%lf%lf",&R,&X);
        double time=X/R;
        double r=cos(time)*R;
        double t=X/r;
        t-=time;
        t+=PI*2;
        int d=t/2/PI;
        t-=d*2*PI;//double没法取模就这么操作吧
        if(t>PI)//考虑跑过头的情况
        {
            t=2*PI-t;
        }
        double ans=t*R;
        printf("%.10lf\n",ans);
    }
    return 0;
}

F. 溶液配制 Ⅰ

容斥原理 记得中间要把只有原数字组合的排列删去

#include <bits/stdc++.h>
#define MOD 1000000007
using namespace std;
typedef long long ll;

ll qpow(ll a, ll b) 
{
    ll res = 1;
    while (b > 0) 
    {
        if (b & 1) 
        { // 如果b是奇数
            res = res * a % MOD;
        }
        a = a * a % MOD; // 底数平方并取模
        b >>= 1; // 指数除以2
    }
    return res;
}

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n,q;
        scanf("%d%d",&n,&q);
        double a[n+1]={0};
        for(int i=1;i<=n;i++)
        {
            scanf("%lf",&a[i]);
        }
        sort(a+1,a+1+n);
        while(q--)
        {
            double x;
            scanf("%lf",&x);
            ll l= lower_bound(a+1,a+n,x)-a;
            ll r= upper_bound(a+1,a+n,x)-a-1;
            ll res=0;
            if(l<=r)//这里要排除只有自己的排列
            {
                ll cnt=r-l+1;
                res=((res+qpow(2,cnt)-1)*qpow(2,l-1)%MOD*qpow(2,n-r)%MOD)%MOD;
            }
            res=(res+(qpow(2,l-1)-1)*(qpow(2,n-r)-1)%MOD+MOD)%MOD;
            res=(res%MOD+MOD)%MOD;
            printf("%lld\n",res);
        }
    }
    return 0;
}

D. 猜 01 串

这应该是我写出来的第一道交互题奥 看起来唬人 其实只要敢看题就不难想 先随便给一个数开始试探 如果连一个都没有就直接确定 要不然就往后试探1或者0 直到试探到1和0都不行说明到底了 然后再往回试探 时间复杂度为O(2n)

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;
typedef long long ll;

int main()
{
    int n,tmp;
    cin>>n;
    string s="1";
    cout<<"? 1\n";
    fflush(stdout);
    cin>>tmp;
    if(tmp==0)
    {
        cout<<"! ";
        for(int i=0;i<n;i++)
            cout<<"1";
        cout<<endl;
        fflush(stdout);
    }
    while(s.size()<n)
    {
        int a,b;
        //printf("? %s%c\n",s,'1');
        cout<<"? "<<s<<"1"<<endl;
        fflush(stdout);
        cin>>a;
        //printf("? %s%c\n",s,'0');
        cout<<"? "<<s<<"0"<<endl;
        fflush(stdout);
        cin>>b;
        if(a>0)
        {
            s=s+"1";
            continue;
        }
        else
        {
            if(b>0)
            {
                s=s+"0";
                continue;
            }
            else
            {
                break;
            }
        }
    }
    while(s.size()<n)
    {
        int a,b;
        //printf("? %c%s\n",s,'1');
        cout<<"? "<<"1"<<s<<endl;
        fflush(stdout);
        cin>>a;
        //printf("? %c%s\n",s,'0');
        cout<<"? "<<"0"<<s<<endl;
        fflush(stdout);
        cin>>b;
        if(a>0)
        {
            s="1"+s;
            continue;
        }
        else
        {
            if(b>0)
            {
                s="0"+s;
                continue;
            }
            else
            {
                break;
            }
        }
    }
    cout<<"! "<<s<<endl;
    return 0;
}

2024 Jiangsu Collegiate Programming Contest

真成高考了 赛前找一大堆模拟题连着刷 想一年前这个时候我也是理综数学连轴转 一天刷三四张卷子来着 最后能买到的书全都刷完了 还是只考了个五山农专(哭)

队友写出来且我不会的我就只贴张图片了

F. Download Speed Monitor

签到*1

#include<bits/stdc++.h>

using i64 = long long;

using f64 = long double;

int main(void) {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::cout << std::fixed << std::setprecision(6);

	int n, k; std::cin >> n >> k;

	std::vector<i64>a(n + 1);
	for (int i = 1; i <= n; i += 1) {
		std::cin >> a[i];
		a[i] += a[i - 1];
	}

	for (int i = k; i <= n; i += 1) {
		f64 x = (a[i] - a[i - k]);
		x /= 1.0 * k;
		if (x <= 1024.0) {
			std::cout << x << " KiBps\n";
		} else {
			x /= 1024.0;
			std::cout << x << " MiBps\n";
		}
	}

	return 0;
}

K. Number Deletion Game

签到*2 看最大值个数奇偶性

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        int a[n];
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        sort(a,a+n);
        int res=1;
        for(int i=n-1;i>0;i--)
        {
            if(a[i-1]==a[i])
                res++;
            else
                break;
        }
        if(res%2==0)
            printf("Bob\n");
        else
            printf("Alice\n");
    }
    return 0;
}

G. Download Time Monitor

签到*3 虽然我只到最后都不知道自己哪里模拟错了

WA版本

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef double db;

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        db b,t1,a1,t2,a2;
        scanf("%lf%lf%lf%lf%lf",&b,&t1,&a1,&t2,&a2);
        if(t1<t2)
        {
            db r1=a1/b;
            if(t1+r1<t2)
            {
                printf("%.9lf %.9lf\n",(db)r1,(db)a2/b);
                continue;
            }
            else
            {
                db mid=(a1-(t2-t1)*b)*2/b;
                r1=t2+mid;
                db tmp=a2;
                a2-=mid*b*0.5;
                if(a2<0)
                {
                    a2=tmp;
                    mid=a2*2/b;
                    db r2=mid;
                    a1-=mid*b*0.5;
                    r1=mid+a1/b;
                    printf("T1:%.9lf %.9lf\n",r1,r2);
                    continue;
                }
                db r2=mid+a2/b;
                printf("T2:%.9lf %.9lf\n",r1,r2);
                continue;
            }
        }
        else if(t1>t2)
        {
            db r2=a2/b;
            if(t2+r2<t1)
            {
                printf("T3:%.9lf %.9lf\n",(db)a1/b,(db)r2);
                continue;
            }
            else
            {
                db mid=(a2-(t1-t2)*b)*2/b;
                r2=t1+mid;
                db tmp=a1;
                a1-=mid*b*0.5;
                if(a1<0)
                {
                    a1=tmp;
                    mid=a1*2/b;
                    db r1=mid;
                    a2-=mid*b*0.5;
                    r2=mid+a2/b;
                    printf("T4:%.9lf %.9lf\n",r1,r2);
                    continue;
                }
                db r1=mid+a1/b;
                printf("T5:%.9lf %.9lf\n",r1,r2);
                continue;
            }
        }
        else
        {
            if(a1==a2)
            {
                db t=a1*2/b;
                printf("T6:%.9lf %.9lf\n",t,t);
            }
            else if(a1<a2)
            {
                db r1=a1*2/b;
                a2-=r1*b*0.5;
                db r2=r1+a2/b;
                printf("T7:%.9lf %.9lf\n",r1,r2);
            }
            else
            {
                db r2=a2*2/b;
                a1-=r2*b*0.5;
                db r1=r2+a1/b;
                printf("T8:%.9lf %.9lf\n",r1,r2);
            }
        }
    }
    return 0;
}

AC版本

#include <bits/stdc++.h>

// Sleep in half the day just for old times' sake
// I won't ask you to wait if you don't ask me to stay

void Excalibur() {
  double v, t1, a1, t2, a2;
  // std::cin>>v>>t1>>a1>>t2>>a2;
  scanf("%lf%lf%lf%lf%lf", &v, &t1, &a1, &t2, &a2);
  bool rev = false;
  if (t1 > t2) {
    rev = false;
    std::swap(t1, t2);
    std::swap(a1, a2);
  }
  double ans1 = 0, ans2 = 0;
  ans1 += std::min(a1 / v, t2 - t1);
  a1 -= ans1 * v;

  if (fabs(a1) <= 0.00001) {
    ans2 = a2 / v;
    if (rev) {
      printf("%.9f %.9f", ans2, ans1);
    } else {
      printf("%.9f %.9f", ans1, ans2);
    }
    printf("\n");
    return;
  }
  double tmp = std::min(a1, a2);
  double mid = tmp * 2 / v;
  ans1 += mid, ans2 += mid;
  a1 -= tmp, a2 -= tmp;
  if (fabs(a1) <= 0.00001 and fabs(a2) <= 0.00001) {
    if (rev) {
      printf("%.9f %.9f", ans2, ans1);
    } else {
      printf("%.9f %.9f", ans1, ans2);
    }
  } else if (fabs(a1) <= 0.00001) {
    ans2 += a2 / v;
    if (rev) {
      printf("%.9f %.9f", ans2, ans1);
    } else {
      // printf("a1:%f\n", a1);
      // printf("a2:%f\n", a2);
      printf("%.9f %.9f", ans1, ans2);
    }
  } else if (fabs(a2) <= 0.00001) {
    ans1 += a1 / v;
    if (rev) {
      printf("%.9f %.9f", ans2, ans1);
    } else {
      printf("%.9f %.9f", ans1, ans2);
    }
  }
  printf("\n");
}

int main() {
  // std::ios::sync_with_stdio(false);
  // std::cin.tie(nullptr);

  int t;
  // std::cin >> t;
  scanf("%d", &t);
  while (t--) Excalibur();

  return 0;
}

I. Integer Reaction

开multiset模拟

E. Divide

主席树

B. Area of the Devil

容斥原理 反过来去计算永远覆盖不到的点 去图里面很容易找到极限状态

如图 我们只考虑使AB间的间隙的扇形最小 其他线无所谓就要像这样连 对每个间隙都是相同的方法计算 最后用圆的总面积减一下即可 代码等我想起来了再贴

C. Radio Direction Finding

这次的二分和浮点数未免太多了一点吧啊喂 这一题其实也是二分 在这个环里面每次询问相邻的两个点 如果得到的结果相等说明在宝藏点连成劣弧里面 如果只相差1则是在优弧里面 所以二分逐渐确定两点位置就行了 也是等我想起来了再贴代码(

2024 Xian Jiaotong University Programming Contest

不是 为什么你们985爷都那么喜欢出数学题啊 做的我头疼

A. 交小西的礼物

交小西人美心善 为什么我们农专没有QwQ

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int a,b,c,d;
        scanf("%d%d%d%d",&a,&b,&c,&d);
        printf("%d\n",a+b+2*c+3*d);
    }
    return 0;
}

C. 榕树之心

直接代公式就行了

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        double x,y;
        scanf("%lf%lf",&x,&y);
        double x1=0.5*x+0.5*y;
        double y1=sqrt(3)/2*x-sqrt(3)/2*y;
        printf("%.9lf %.9lf\n",x1,y1);
    }
    return 0;
}

F. Everyone’s ALL IN 

羡慕你们985的二刺猿浓度 说回题目 我们要先回顾一下高中的二项式定理 两个数组任意两个数相乘的所有组合求和其实等于两个数组的和的乘积 所以这题也就很简单了

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    ll n,m;
    scanf("%lld%lld",&n,&m);
    ll bl[1000005]={0};
    for(ll i=1;i<=n;i++)
    {
        ll num;
        scanf("%lld",&num);
        bl[num]+=i;
    }
    while(m--)
    {
        ll x,y;
        scanf("%lld%lld",&x,&y);
        ll res=bl[x]*bl[y];
        printf("%lld\n",res);
    }
    return 0;
}

B. 转呀转

其实给你的点的坐标只是用来算半径用的 如果像我队友一样把自己绕到坑里想算结束时点的坐标那让我先嘲笑一会 只需要算转过的角度然后自己画个图就行了

#include <bits/stdc++.h>
#define PI 3.1415926535897932384626
using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int x,y;
        double t,v;
        scanf("%d%d%lf%lf",&x,&y,&t,&v);
        double r=sqrt(x*x+y*y);
        double s=t*v;
        int tmp=s;
        s-=tmp;
        if(s<0)
            s+=1;
        if(s>0.5)
            s=1-s;
        if(s==0.5)
        {
            double res=2.0*r;
            printf("%.9lf\n",res);
            return 0;
        }
        if(s==0)
        {
            printf("0.000000000\n");
            return 0;
        }
        s/=r;
        double res=2*r*sin(s*PI);
        printf("%.9lf\n",res);
    }
    return 0;
}

不过我自己可能比队友还蠢捏 写了个代码因为精度问题WA5了 最后还是队友重写了一遍(肯定是因为我没看MyGO!!!他看了的缘故喵)

#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
using namespace std;
const int N = 1e6 + 10;
typedef long long LL;
typedef pair<LL, LL> PLL;
#define qwq ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define pi 3.1415926535897932384626

void solve()
{
    LL x, y;
    double t, w;
    cin >> x >> y >> t >> w;
    double l = w * t;
    l = l - (LL)l;
    // cout << l << endl;
    double sita = l * pi;
    double r = sqrt(x * x + y * y);
    // cout << r << endl;
    // cout << sita << endl;
    double ans = r * sin(sita) * 2;
    printf("%.9f\n", ans);
}

int main()
{

    solve();
    return 0;
}

D. 瑟莉姆的宴会

看完题目最好想的肯定就是这样的一个贪心

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int all[n+1]={0};
        while(m--)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            all[y]=x;
        }
        int lst_p=0;
        for(int i=1;i<=n;i++)
        {
            if(all[i]==0)
            {
                if(i!=1)
                    all[i]=1;
                else
                    all[i]=2;
                lst_p=i;
            }
        }
        all[lst_p]=0;
        for(int i=1;i<=n;i++)
        {
            printf("%d ",all[i]);
        }
        printf("\n");
    }
    return 0;
}

但是WA13了 原因可能是覆盖的问题 因为题目并不是要求直接支配才增加力量 间接的也可以 我一开始没看到这一点

这个时候我们发现如果每个人都被下一个人支配和每个人都被上一个人支配这两种情况得到了力量一定是相反数 那么肯定是一个可以一个不行 所以我们算其中一种情况 如果不满足题意就把他反过来就可以了

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        int all[n+1]={0};
        int res=0;
        while(m--)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(x>y) res++;
            else res--;
        }
        if(res<0)
        {
            for(int i=0;i<n;i++) printf("%d ",i);
        }
        else
        {
            for(int i=2;i<=n;i++) printf("%d ",i);
            printf("0 ");
        }
        printf("\n");
    }
    return 0;
}

The 2024 CCPC National Invitational Contest (Changchun) , The 17th Jilin Provincial Collegiate Programming Contest

赤石场 赛前前一天猛打两场 结果都好像没啥影响

I. The Easiest Problem

输出24即可 这里用的Py

from collections import Counter
import sys

input = sys.stdin.readline

s = input()
c = Counter(s)
ans = 0
for i in range(ord("a"), ord("a") + 26):
    ans += c[chr(i)]
print(ans)

G. Platform Game

看样例以为是排好序的结果WA5了 补一个排序然后模拟就过了

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
struct segment{
    int l;
    int r;
    int y;
};
bool cmp(segment a,segment b)
{
    if(a.y==b.y)
        return a.l>b.l;
    return a.y<b.y;
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        segment all[n];
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&all[i].l,&all[i].r,&all[i].y);
        }
        sort(all,all+n,cmp);
        int sx,sy;
        scanf("%d%d",&sx,&sy);
        for(int i=n-1;i>=0;i--)
        {
            if(sy<all[i].y)
                continue;
            if(all[i].l<sx&&all[i].r>sx)
            {
                sx=all[i].r;
                sy=all[i].y;
            }
        }
        printf("%d\n",sx);
    }
    return 0;
}

L. Recharge

贪心即可 题解写的二分不知道怎么想的

#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int t;
	std::cin >> t;
	while (t--) {
		int k, x, y;
		std::cin >> k >> x >> y;

		if (k == 1) {
			std::cout << (x + y) << "\n";
			continue;
		}

		if (k % 2 == 0) {
			std::cout << ((x + (y * 2)) / k) << "\n";
			continue;
		}
		int ans = 0;
		int c = y * 2 / (k - 1);

		if (x >= c) {
			ans += c;
			x -= c;
			y -= c * (k / 2);
			ans += (x + 2 * y) / k;
		} else {
			ans += x;
			y -= x * (k - 1) / 2;
			ans += y / ((k + 1) / 2);
		}

		std::cout << ans << "\n";
	}

	return 0;
}

2023 Xian Jiaotong University Programming Contest

A. 大水题

题如其名 读入小于等于6输出water 不然就dry

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        if(n<=6)
            printf("water\n");
        else
            printf("dry\n");
    }
    return 0;
}

B. 原粥率

题如上题名 除一下就行

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        double a,b;
        scanf("%lf%lf",&a,&b);
        double ret=a/b;
        printf("%.9lf\n",ret);
    }
    return 0;
}

C. 话剧

还是水题

#include<bits/stdc++.h>

using i64 = long long;

int main(void) {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::cout << std::fixed << std::setprecision(6);

	int x, y, z; std::cin >> x >> y >> z;

	long double h = 1.0 * z / (x * y);

	std::cout << h;

	return 0;
}

D. 点集扩张

每次是所有点一起移动 所以最后他们组成的一定是个填满的且包含原点的长方形 所以统计最大最小就行了

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int main()
{
    int T=1;
    //scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        int maxx=-300,maxy=-300,minx=300,miny=300;
        int flag=0;
        for(int i=0;i<n;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(x==0 and y==0) flag=1;
            maxx=max(maxx,x);
            maxy=max(maxy,y);
            minx=min(minx,x);
            miny=min(miny,y);
        }
        int chang=maxx-minx+1,kuan=maxy-miny+1;
        if(chang*kuan!=n||flag==0)
            printf("-1\n");
        else
            printf("%d\n",chang+kuan-2);
    }
    return 0;
}

F. 渡渡鸟游乐场​​​​​​​

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在实际工作中应用高效工作复盘-O混合式课程所学可以帮助你提升工作效率和质量,以及提供更好的自我和团队协作能力。以下是可能的改变和解决问题的方法: 1. 识别复盘中存在的问题:OMO混合式课程可能帮助你认识到你在复盘过程中可能存在的问题,比如缺乏系统性、不够深入、忽视重要细节等。你可以通过学习课程中的方法和技巧,更好地识别问题并加以解决。 2. 提高复盘效率:OMO混合式课程可能教授了一些高效的复盘方法,例如SMART目标设定、5W1H问题分析法、鱼骨图等。通过学习这些方法,你可以更迅速地找到问题根源、制定解决方案,并在实际工作中提高复盘效率。 3. 提升自我管理能力:OMO混合式课程可能强调了自我管理的重要性,例如时间管理、优先级排序、任务分解等。这些技能可以帮助你更好地组织和规划工作,提高自我效能感,并更好地应对工作挑战。 4. 加强团队协作能力:OMO混合式课程可能涉及到团队复盘和共享经验的内容。通过学习这些课程,你可以了解如何在团队中进行有效的复盘和知识分享,促进团队学习和协作,提高整个团队的绩效。 综上所述,通过应用高效工作复盘-OMO混合式课程所学,你可能会改善复盘中存在的问题,并在实际工作中提高工作效率、自我管理能力和团队协作能力。这将有助于你更好地应对工作挑战,取得更好的成果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值