题解视频正在录制中
A - Candies
二进制
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
using namespace std;
int T,N;
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N;
int cur = 3,ans = -1;
for(int i = 2;i<=31;i++){
if(N%cur == 0){
ans = N/cur;
break;
}
cur = cur<<1|1;
}
cout<<ans<<'\n';
}
return 0;
}
B - Balanced Array
思维+构造
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
using namespace std;
int T,N;
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N;
if((N/2)%2 == 1) cout<<"NO\n";
else{
cout<<"YES\n";
int cur = 2;
for(int i = 1;i<=N/2;i++){
cout<<cur<<" ";
cur +=2;
}
cur = 1;
for(int i = 1;i<=N/2;i++){
if(i<N/2) cout<<cur<<" ";
else cout<<cur + N/2<<'\n';
cur +=2;
}
}
}
return 0;
}C - Alternating Subsequence
dp
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
using namespace std;
int T,N;
int arr[maxn];
int dp[maxn];
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N;
for(int i = 1;i<=N;i++) cin>>arr[i];
dp[1] = arr[1];
int tail = 1;
for(int i =2;i<=N;i++){
if((ll)arr[i] * dp[tail] < 0) dp[++tail] = arr[i];
else dp[tail] = max(dp[tail],arr[i]);
}
ll sum = 0;
for(int i = 1;i<=tail;i++) sum += dp[i];
cout<<sum<<'\n';
}
return 0;
}D - Constant Palindrome Sum
差分
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
using namespace std;
int T,N,K;
int arr[maxn],ca[maxn],equ[maxn];
void init_ca(){
memset(ca,0,4*2*K+10);
memset(equ,0,4*2*K+10);
for(int i = 1;i<=N/2;i++){
int &a = arr[i],&b = arr[N-i+1];
equ[a+b] ++;
ca[min(a,b)+1] += 1;
ca[max(a,b)+K+1] -=1;
}
for(int i = 1;i<=2*K;i++) ca[i] += ca[i-1];
}
int sovle(){
int ans = 2e9;
for(int i = 2;i<=2*K;i++){
int cnt2 = (N/2 - ca[i])*2;
int cnt1 = ca[i] - equ[i];
ans = min(ans,cnt1 + cnt2);
}
return ans;
}
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N>>K;
for(int i = 1;i<=N;i++) cin>>arr[i];
init_ca();
cout<<sovle()<<'\n';
}
return 0;
}E - Weights Distributing
BFS+思维
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define PI acos(-1)
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5+10;
using namespace std;
int T,N,M,a,b,c;
ll edg[maxn];
int h[maxn],e[maxn*2],ne[maxn*2],idx;
int disa[maxn],disb[maxn],disc[maxn];bool vis[maxn];
queue<int> q;
void add(int a,int b){
e[++idx] = b,ne[idx] = h[a],h[a]= idx;
}
void bfs(int u,int dis[]){
memset(vis,false,4*N+5);
while(q.size()) q.pop();
q.push(u);
vis[u] = true;
dis[u] = 0;
while(q.size()){
int u = q.front();q.pop();
for(int i = h[u];i;i = ne[i]){
int v = e[i];
if(vis[v]) continue;
vis[v] = true;
dis[v] = dis[u] + 1;
q.push(v);
}
}
}
ll solve(){
sort(edg+1,edg+M+1);
for(int i = 1;i<=M;i++) edg[i] += edg[i-1];
bfs(a,disa);bfs(b,disb);bfs(c,disc);
ll ans = 1e18;
for(int i = 1;i<=N;i++) {
int da = disa[i],db = disb[i],dc = disc[i];
if(da + db + dc > M) continue;
ans = min(ans,2*edg[db] + (edg[da+db+dc] - edg[db]));
}
return ans;
}
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N>>M>>a>>b>>c;
memset(disa,0,4*N+5);
memset(disb,0,4*N+5);
memset(disc,0,4*N+5);
memset(h,0,4*N+5);
for(int i = 1;i<=M;i++) cin>>edg[i];
idx = 0;
for(int i = 1;i<=M;i++){
int a,b;cin>>a>>b;
add(a,b);
add(b,a);
}
cout<<solve()<<'\n';
}
return 0;
}F - Restore the Permutation by Sorted Segments
思维+构造+答案验证
#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
#define fs first
#define sc second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
using namespace std;
int T,N;
set<int> st[205];
vector<int> adj[205];
int ans[205],order[205];
void init(){
for(int i = 1;i<=200;i++) st[i].clear();
memset(ans,0,sizeof ans);
for(int i = 1;i<=200;i++) adj[i].clear();
}
bool dfs2(int u,int pos,set<int> st[]){
if(pos == N+1) return true;
if(u == -1 && pos<=N) return false;
ans[pos] = u;
int nx_u = -1;
for(int i = 1;i<=N-1;i++){
st[i].erase(u);
if(st[i].size() == 1) nx_u = *(st[i].begin());
}
return dfs2(nx_u,pos+1,st);
}
bool cmp(int &a,int &b){
return order[a] < order[b];
}
bool judge(){
for(int i = 1;i<=N;i++) order[ans[i]] = i;
for(int i = 1;i<=N-1;i++){
sort(adj[i].begin(),adj[i].end(),cmp);
for(int j = 1;j<adj[i].size();j++){
int &l = adj[i][j-1],&r = adj[i][j];
if(order[r] - order[l] != 1) return false;
}
}
return true;
}
void solve(){
for(int i = 1;i<=N;i++){
set<int> tmp[205];
for(int j = 1;j<=200;j++){
for(auto v:st[j]){
tmp[j].insert(v);
}
}
if(dfs2(i,1,tmp) && judge()) break;
}
for(int i = 1;i<=N;i++) cout<<ans[i]<<" ";cout<<'\n';
}
int main(){
// debug;
ios;
cin>>T;
while(T--){
init();
cin>>N;
for(int i = 1;i<=N-1;i++){
int k;cin>>k;
while(k--){
int cur;cin>>cur;
st[i].insert(cur);
adj[i].push_back(cur);
}
}
solve();
}
return 0;
}
京公网安备 11010502036488号