SMU Spring 2023 Contest Round 5(2023 (ICPC) Jiangxi Provincial Contest -- Official Contest)

发布时间 2023-06-01 23:13:27作者: Ke_scholar

题目链接

Problem A. Drill Wood to Make Fire

S * V >= n即可

#include<bits/stdc++.h>

#define int long long
#define endl '\n'

using namespace std;

const int N = 2010,mod = 1e9 + 7;
int  n,s,v;

void solve() {
    cin >> n >> s >> v;
    if(s * v >= n)
        cout << 1 << endl;
    else cout << 0 << endl;
}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int h_h = 1;
    cin >> h_h;
    while(h_h--)solve();
    return 0;
}
View Code

 

Problem B. Wonderful Array

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define  inf 0x3f3f3f3f

using namespace std;
const int N = 2e3 + 10;

//typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<int, int > mp;
int n,m,t,k;
priority_queue <int,vector<int>,greater<int> > Q;
void solve()
{
    cin >> k;
    vector<int> a(k);
    for(int i =  0;i < k;i++)
        cin >> a[i];
    int x;
    cin >> n >> m >> x;
    for(int i = 0;i < k;i++)
        a[i] %= m;
    int sum = x % m;
    int num = 0;
    for(int i = 0;i < k;i++)
        num += a[i];
    sum += n / k * num;
    for(int i = 0;i < n % k;i++)
        sum += a[i];
    cout << n - sum / m << endl;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    int Ke_scholar = 1;
    //cin >> Ke_scholar;
    while(Ke_scholar--)
        solve();
    return 0;
}

/*

 */
View Code

 

Problem I. Tree

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long

using namespace std;

const int N = 1e6+10, mod = 1e9 + 7;

//typedef long long ll;
typedef pair<int,int> PII;
int n,m,t,k;
map<int,int> mp;
priority_queue<int> QQ;
deque<int> Q;
void solve() {
    cin >> n >> m;
    vector<PII> a[n + 1];
    vector<int> sum(n + 1,0);
    for(int i = 1;i < n;i++){
        int x,y,z;
        cin >> x >> y >> z;
        a[x].push_back({y,z});
        a[y].push_back({x,z});
    }
    for(int i = 1;i <= n;i++){
        for(auto j : a[i])
            sum[i] ^= j.second;
    }
    while(m--){
        int op;
        cin >> op;
        if(op == 1){
            int x,y,z;
            cin >> x >> y >> z;
            sum[x] ^= z;
            sum[y] ^= z;
        }
        else{
            int x;
            cin >> x;
            cout << sum[x] << endl;
        }
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int Ke_scholar = 1;
    //cin >> Ke_scholar;
    while(Ke_scholar--)
        solve();
    return 0;
}
/*

 */
View Code

 

Problem J. Function

#include  <map>
#include  <set>
#include  <cmath>
#include  <queue>
#include  <stack>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm>
#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long
#define LB long double

using namespace std;

const int N = 1000000000, mod = 1e9 +7;

//typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<char, int > mp;
//priority_queue <LB,vector<LB>,less<LB> > Q;
int n,m,t,k;
/*

 */
string s;
void solve()
{
    cin >> n;
    vector<int> b(n + 1);
    for(int i = 1;i <= n;i++)
        cin >> b[i];
    int sn = sqrt(n);
    int q;
    cin >> q;
    while(q--){
        int op;
        cin >> op;
        if(op){
            int x;
            cin >> x;
            int res = LONG_LONG_MAX;
            for(int i = x - sn; i <= sn + x + 1;i ++){
                if(i >= 0 && i < n && b[i])
                    res = min(res, (i - x) * ( i - x) + b[i]);
            }
            cout << res << endl;
        }
        else{
            int x,y;
            cin >> x >> y;
            if(b[x])
                b[x] = min(y, b[x]);
            else
                b[x] = y;
        }
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    int Ke_scholar = 1;
//    cin >> Ke_scholar ;
    while(Ke_scholar--)
        solve();
    return 0;
}
View Code

 

Problem K. Split

实际上就是先对n个数的差进行预处理,排序后求一个前缀和,操作0时对于这个差值是不会产生任何改变的,操作1时给一个整数k,则n - k - 1的前缀和.

#include<bits/stdc++.h>
using namespace std;



int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0;i < n;i ++)
        cin >> a[i];
    int q;
    vector<int> ve;
    for(int i = 1;i < n;i ++){
        int x = abs(a[i] - a[i - 1]);
        ve.push_back(x);
    }
    sort(ve.begin(),ve.end());
    map<int,int> mp;
    for(int i = 0;i < ve.size();i++){
        if(i == 0)
            mp[i] = ve[i];
        else
            mp[i] = ve[i] + mp[i - 1];
    }
    cin >> q;
    while(q--){
        int op;
        cin >> op;
        if(!op){
            int x;
            cin >> x;
            a[x - 1] = a[x] + a[x - 2] - a[x - 1];
        }
        else{
            int k;
            cin >> k;
            cout << mp[n - k - 1] << endl;
        }
    }
    return 0;
}
/*

 */
View Code

 

Problem L. Zhang Fei Threading Needles - Thick with Fine

输出n - 1即可

#include  <map>
#include  <set>
#include  <cmath>
#include  <queue>
#include  <stack>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm>
#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long

using namespace std;

const int N = 1e9 + 10, mod = 1e9 +7;

//typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<char, int > mp;
//priority_queue <int,vector<int>,greater<int> > q2;
int n,m,t,k;
/*

 */
string s;
vector<PII> a,ans;
void solve()
{
    cin >> n;
    cout << n - 1 << endl;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int Ke_scholar = 1;
    //cin >> Ke_scholar ;
    while(Ke_scholar--)
        solve();
    return 0;
}
View Code