【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;
}

浙公网安备 33010602011771号