【LGR-292-Div.3】洛谷基础赛 #37 & MSOI Round 1の题解

前言:本人赛时 \(400\) 分,觉得本次基础赛对比以往难度有所下降
传送门
放一下代码,四道题难度都很简单

T1

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

int main()
{
	string s;
	cin >> s;
	int st = 0;
	string s1;
	while(1)
	{
		if(s.size() - st <= 0)
		{
			break;
		}
		if(!(st % 2))
		{
			s1 += s.substr(0 , s.size() - st);
		}
		else
		{
			string s2 = s.substr(st , s.size() - st);
			reverse(s2.begin() , s2.end());
			s1 += s2;
		}
		st++;
	}
	cout << s1 << endl;
	return 0;
}

T2

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[100010] , b[100010];
bool t[100010];
signed main()
{
	int n;
	cin >> n;
	for(int i = 1;i < n;i++)
	{
		cin >> a[i];
	}
	for(int i = 2;i <= n;i++)
	{
		b[i] = b[i - 1] + a[i - 1];
	}
	for(int i = 1;i <= n;i++)
	{
		cin >> t[i];
	}
	int ans = 0 , l = 1;
	while(l <= n)
	{
		int r = l + 1;
		while(r <= n && t[r] == 1)
		{
			r++;
		}
        int l1 = b[l] , r1 = b[r];
        int len = r - l;
        for(int i = l + 1;i < r;i++)
        {
        	int l2 = (r1 - l1) * (i - l);
        	int r2 = (b[i] - l1) * len;
        	if(l2 != r2)
        	{
        		ans++;
			}
		}
		l = r;
	}
	cout << ans << endl;
	return 0;
}

T3

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e18;
const int SZ = 200005;
vector<int> e[SZ];
ll w[SZ], mx[SZ];
bool st[SZ];
int n , ed , m , me;
int main()
{
    cin >> n >> ed >> m >> me;
    for(int i = 1;i <= n;i++)
    {
    	cin >> w[i];
	}
    for(int i = 1;i <= ed;i++)
    {
        int u , v;
        cin >> u >> v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    memset(st , 0 , sizeof(st));
    priority_queue<pair<ll , int>> q;
    memset(mx , -1 , sizeof(mx));
    for(int i = 1;i <= m;i++)
    {
        int x;
        cin >> x;
        st[x] = true;
        mx[x] = w[x];
        q.push(make_pair(w[x] , x));
    }
    while(!q.empty())
    {
        pair<ll , int> p = q.top();
        q.pop();
        ll val = p.first;
        int u = p.second;
        if(val < mx[u])
        {
        	continue;
		}
        for(int v : e[u])
        {
            if(v == me)
            {
            	continue;
			}
            if(val >= w[v] && mx[v] < val)
            {
                mx[v] = val;
                q.push(make_pair(val , v));
            }
        }
    }
    int res = 0;
    for(int v : e[me])
    {
        if(mx[v] != -1)
        {
        	res++;
		}
    }
    cout << res << endl;
    return 0;
}

T4

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll INF = 1e18;
const int N = 510;
struct E
{
    int to;
	ll w;
    E(int t, ll wi) : to(t), w(wi){}
};
vector<E> e[N];
ll dp[N][N];
int n , m;
int main()
{
    cin >> n >> m;
    for(int i = 1;i <= m;i++)
    {
        int u , v;
		ll w;
        cin >> u >> v >> w;
        e[u].emplace_back(v , w);
    }
    for(int i = 0;i <= n;i++)
        for(int j = 0;j <= n;j++)
            dp[i][j] = INF;
    dp[1][1] = 0;
    priority_queue<pair<ll, pair<int , int> >,
                   vector<pair<ll , pair<int , int> > >,
                   greater<pair<ll , pair<int , int> > > > q;
    q.push(make_pair(0 , make_pair(1 , 1)));
    while(!q.empty())
    {
        pair<ll , pair<int , int> > now = q.top();
        q.pop();
        ll dis = now.first;
        int stp = now.second.first;
        int u = now.second.second;
        if(dis > dp[stp][u])
        {
        	continue;
		}
        if(stp >= n)
        {
        	continue;
		}
        for(int i = 0;i < e[u].size();i++)
        {
            E &eg = e[u][i];
            int v = eg.to;
            ll w = eg.w;
            if(dp[stp + 1][v] > dis + w)
            {
                dp[stp + 1][v] = dis + w;
                q.push(make_pair(dp[stp + 1][v] , make_pair(stp + 1 , v)));
            }
        }
    }
    ll res = INF;
    int lim = n / 2;
    for(int k = 1;k <= lim;k++)
    {
        res = min(res, dp[k][n]);
    }
    if(res == INF)
    {
    	cout << -1 << endl;
	}
    else
    {
    	cout << res << endl;
	}
    return 0;
}
posted @ 2026-08-02 20:14  jianghaochen  阅读(5)  评论(0)    收藏  举报