Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)

今天看不下去数电vp一场div2,搞A搞了很长时间,导致后面没有时间写,不过今天补题的时候全是独立补出来的没有看题解
vp3题,补3题

A - Kids Seating

最开始想的是与质数有关,乱七八糟搞了半天,结果最后回头一想直接按照此代码输出即可。

首先我们至少找一个所有数都有的因子,我想到了2,然后又想某数不能全是另一个数的因子,于是发现对于n来说,选择n+1→2×nn+1\to 2×nn+12×n这n个数一定满足上述条件,然后就A了

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int main()
{IO;int T=1;cin>>T;while(T--){int n;cin>>n;for(int i=2*n;i>n;i--)cout<<2*i<<' ';cout<<'\n';}return 0;
}

B - Saving the City

首先把连续的地雷搞出来,每一个连续的地雷可以随着前面连续的地雷一起引爆,花费连接的代价,或者自己引爆,花费引爆的代价,两者相比取最小即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int f[N];
int main()
{IO;int T=1;cin>>T;while(T--){int a,b;cin>>a>>b;string s;cin>>s;int n=s.size();vector<pair<int,int>> seg;s="0"+s;seg.push_back({0,n+1});for(int i=1;i<=n;i++){if(s[i]=='0') continue;int j=i;while(j<=n&&s[j]=='1') j++;seg.push_back({i,j-1});i=j;}f[1]=a;for(int i=2;i<seg.size();i++){int cnt=seg[i].first-seg[i-1].second-1;f[i]=f[i-1]+min(b*cnt,a);}cout<<f[seg.size()-1]<<'\n';}return 0;
}

C - The Delivery Dilemma

二分答案即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int n;
int a[N],b[N];
bool check(int x)
{ll now=0;for(int i=1;i<=n;i++)if(a[i]>x) now+=b[i];return now<=x;
}
int main()
{IO;int T=1;cin>>T;while(T--){   cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];int l=0,r=1e9+1;while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}cout<<l<<'\n';}return 0;
}

D - Extreme Subtraction

看着像差分那么就是差分!

构造差分数组,然后将原数组1→k1\to k1k减一,等价于差分数组d1−1d_1-1d11dk+1+1d_{k+1}+1dk+1+1,将后面k个数减一等价于差分数组某位置-1,如果原数组满足题意只需让差分数组全是0,然后随意搞搞就行了太晚了懒得写了

注意差分数组的构造过程

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=300010;
const ll mod=1e9+7;
int a[N],d[N];
int main()
{IO;int T=1;cin>>T;while(T--){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) d[i]=a[i]-a[i-1];ll cnt=0;for(int i=2;i<=n;i++)if(d[i]<0) cnt-=d[i];if(cnt>d[1]) cout<<"NO\n";else cout<<"YES\n";}return 0;
}

E - Long Permutation

这题能够想到非常高兴

13!=622702080013!=622702080013!=6227020800
14!=8717829120014!=8717829120014!=87178291200
观察我们不难发现我们最多会只需2×105×1052×10^5×10^52×105×105next_permutation操作,分析不难知道如果n很大,进行操作2也只会改变后面14个数,其他前面的数位置不会改变,于是可以每次暴力让最后14个数进行next_permutation操作,知道排名求排列数有一个著名的算法——逆康托展开,然后分块计算即可。
前几天逛知乎的时候无意间学了一下康托展开,这就用上了很高兴。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
const ll mod=998244353;
ll fact[20];
int P[20],A[20];
ll a[N],s[N];
void calc(int n,ll x) 
{vector<int> rest(n,0);iota(rest.begin(), rest.end(), 1);memset(P,0,sizeof P);memset(A,0,sizeof A);for (int i = 1; i <= n; ++i){A[i]=x/fact[n-i];x%=fact[n-i];}for (int i = 1; i <= n; ++i){P[i]=rest[A[i]];rest.erase(lower_bound(rest.begin(), rest.end(), P[i]));}
}
int main()
{IO;int T=1;//cin>>T;while(T--){int n,q;cin>>n>>q;fact[0]=1;for(int i=1;i<=14;i++) fact[i]=i*fact[i-1];for(int i=1;i<=n;i++) a[i]=i,s[i]=s[i-1]+a[i];ll now=0;if(n<=14){while(q--){int op;cin>>op;if(op==1){int l,r;cin>>l>>r;ll res=0;calc(n,now);for(int i=l;i<=r;i++) res+=P[i];cout<<res<<'\n';}else{int x;cin>>x;now+=x;}}}else{while(q--){int op;cin>>op;if(op==1){int l,r;cin>>l>>r;ll res=0;calc(14,now);int bd=n-14;if(r<=bd) res+=s[r]-s[l-1];else if(l>bd){for(int i=l;i<=r;i++) res+=P[i-bd]+bd;}else{res+=s[bd]-s[l-1];for(int i=bd+1;i<=r;i++) res+=P[i-bd]+bd;}cout<<res<<'\n';}else{int x;cin>>x;now+=x;}}}}return 0;
}

F - Identify the Operations

猜结论,考虑当前数的两端的数,如果某数不存在b数组中或者在b数组中的位置小于目前的数贡献+1,每次乘积计算贡献即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
const ll mod=998244353;
int n,k;
int a[N],b[N];
int pos[N];
int st[N];
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n>>k;for(int i=1;i<=n;i++) pos[i]=st[i]=0;for(int i=1;i<=n;i++) {cin>>a[i];pos[a[i]]=i;}for(int i=1;i<=k;i++) {cin>>b[i];st[b[i]]=i;}ll res=1;for(int i=1;i<=k;i++){int p=pos[b[i]];int now=0;if(p>1&&st[a[p-1]]<i) now++;if(p<n&&st[a[p+1]]<i) now++;res=res*now%mod;}cout<<res<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数论】GCD(P2568)

正题 P2568 题目大意 求满足1≤x,y≤n1\leq x,y\leq n1≤x,y≤n且gcd(x,y)primegcd(x,y)primegcd(x,y)prime的数对(x,y)(x,y)(x,y)的个数 解题思路 题目即求 ∑i1n∑j1n[gcd(i,j)prime]\sum_{i1}^n\sum_{j1}^n[gcd(i,j)prime]i1∑n​j1∑n​[gcd(i,j)prime] 可以考虑先枚举…

AT4502-[AGC029C]Lexicographic constraints【二分,栈】

正题 题目链接:https://www.luogu.com.cn/problem/AT4502 题目大意 给出nnn个长度SSS&#xff0c;求一个最小mmm表示用大小为mmm的字符集构造出nnn个符合对应长度的字符串使得字符串按照给出顺序从小到大。 1≤n≤2105,1≤Si≤1091\leq n\leq 2\times 10^5,1\leq S_i\leq 10^…

2020牛客国庆集训派对day1 C. Bob in Wonderland

Bob in Wonderland 题意&#xff1a; 一棵树&#xff0c;问最少移动多少次边可以使其变成一个链&#xff1f; 移动是指&#xff1a;从原位置拆下并连到新位置&#xff0c;这样算一次 题解&#xff1a; 错误思路 我一开始在想既然求最少移动次数&#xff0c;那我们就尽可能…

Ocelot简易教程(七)之配置文件数据库存储插件源码解析

上篇文章Ocelot简易教程&#xff08;六&#xff09;之重写配置文件存储方式并优化响应数据 给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储到数据库中。并没有对实现原理进行相应的阐述。今天抽空把实现的原理给大家说道说道。明白原理后&#xff0c;大家就可…

【数论】YY的GCD(P2257)

正题 P2257 题目大意 给你T组询问&#xff0c;每组询问给出n,m&#xff0c;让你求 1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m 且 gcd(x,y)primegcd(x,y)primegcd(x,y)prime 的方案数 解题思路 根据题意&#xff0c;有 ∑i1n∑j1m[gcd(i,j)prime]\sum_{i1}…

ASP.NET Core 2调用Azure云上的PowerBI报表展示

在开发企业应用中&#xff0c;报表功能是当之无愧的重头戏&#xff0c;如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题。而找到一款合适的报表往往都需要考率价格、开发、风格、支撑等因素。那么&#xff0c;我在这里给大家介绍一款由微软提供的可视化报表工…

2020牛客国庆集训派对day1 Zeldain Garden

Zeldain Garden 题意&#xff1a; 问[L,R]内所有数的因子的数量和 题解&#xff1a; 如果传统暴力做肯定不行 我们来找找规律&#xff1a; 数字&#xff1a; 因子数目 1~n的因子数和 1 1 1 2 2 321/ 3 2 5311 4 3 84211 5 2 1052111 6 4 14 7 2 16 8…

CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】

正题 题目链接:https://www.luogu.com.cn/problem/CF585E 题目大意 给出一个大小为nnn的可重集TTT&#xff0c;求有多少个它的非空子集SSS和元素xxx满足 x∉S,gcd{S}>1,gcd(S,x)1x\notin S,gcd\{S\}>1,gcd(S,x)1x∈/​S,gcd{S}>1,gcd(S,x)1 1≤n≤51051\leq n\leq 5…

ABC182——F - Valid payments Editorial

F - Valid payments Editorial 大佬题解 看了述题解我才刚理解题目意思。 Here, both Lunlun and the clerk used the minimum number of coins needed to represent those amounts of money. 这句话意味着任何数都能用a1…ana_1\dots a_na1​…an​这些面值的货币唯一表示 并…

【数论】GCD SUM(P2398)

正题 P2398 题目大意 给出n&#xff0c;求∑i1n∑j1ngcd(i,j)\sum_{i1}^n\sum_{j1}^ngcd(i,j)i1∑n​j1∑n​gcd(i,j) 解题思路 考虑先枚举gcd&#xff0c;那么有 ∑d1nd∑i1n/d∑j1n/d[gcd(i,j)1]\sum_{d1}^nd\sum_{i1}^{n/d}\sum_{j1}^{n/d}[gcd(i,j)1]d1∑n​di1∑n/d​j…

AT4519-[AGC032D]Rotation Sort【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4519 题目大意 给出一个长度为nnn的排列&#xff0c;每次可以选择一个区间&#xff0c;然后花费AAA的代价向左旋转&#xff08;最左边的丢到最右边&#xff09;或者花费BBB的代价向右旋转。 排升序序的最小花费。 1≤n≤50…

2020牛客国庆集训派对day2 VIRUS OUTBREAK

VIRUS OUTBREAK 文章目录题目描述输入描述:输出描述:题解&#xff1a;代码&#xff1a;题目描述 The State Veterinary Services Department recently reported an outbreak of a newly found cow disease. All cows found to have affected by the disease have since euthan…

Codeforces Round #684 (Div. 2)

A - Buy the String 要么全变成1要么全变成0要么一个都不改变&#xff0c;三种情况取最小。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<stack>…

聊聊如何设计千万级吞吐量的.Net Core网络通信!

作者&#xff1a;大石头时间&#xff1a;2018-10-26 晚上 20:00地点&#xff1a;QQ群-1600800内容&#xff1a;网络通信&#xff0c;网络库使用方式网络库设计理念&#xff0c;高性能要点介绍首先看下面这张很具有代表性的图&#xff0c;2018年5月份做的测试。当时单服务器得到…

2020牛客国庆集训派对day2 AKU NEGARAKU

来源&#xff1a;牛客网&#xff1a; 题目描述 1st Academy is an international leadership training academy based in Kuala Lumpur. Every year, the company trains thousands of people to be supplied to companies around the world. To be fair amongst all the tra…

P5540-[BalkanOI2011]timeismoney|最小乘积生成树【最小生成树,凸壳】

正题 题目链接:https://www.luogu.com.cn/problem/P5540 题目大意 给出nnn个点mmm条边边权是一个二元组(ai,bi)(a_i,b_i)(ai​,bi​)&#xff0c;求出一棵生成树最小化 (∑e∈Tae)(∑e∈Tbe)(\sum_{e\in T}a_e)\times(\sum_{e\in T}b_e)(e∈T∑​ae​)(e∈T∑​be​) 的情况下…

【数论】能量采集(P1447)

正题 P1447 题目大意 给出n,m&#xff0c;求2∑i1n∑j1m(gcd(i,j)−1)nm2\times \sum_{i1}^n\sum_{j1}^m(gcd(i,j)-1)n\times m2i1∑n​j1∑m​(gcd(i,j)−1)nm 解题思路 2∑i1n∑j1m(gcd(i,j)−1)nm2∑i1n∑j1mgcd(i,j)−nm2\times \sum_{i1}^n\sum_{j1}^m(gcd(i,j)-1)n\tim…

codeforces1440 E. Greedy Shopping

昨天晚上做完4题还有30分钟&#xff0c;感觉太晚了就没继续写&#xff0c;不过看了下E题感觉是一个线段树题目&#xff0c;今天中午看了看发现就是一个线段树上递归的询问问题&#xff0c;不过我之前没写过但是靠着日益强大的乱写能力竟然水出来了~~ E. Greedy Shopping 不难…

MonkeyFest2018 微软最有价值专家讲座

MonkeyFest2018微软最有价值专家讲座Monkey Fest 是一个一年一度由全球Microsoft Xamarin跨平台开发者发起的全球性社区活动&#xff0c;主要是推广在云、人工智能、大数据、移动开发等技术。本次活动同时在新加坡&#xff0c;美国&#xff0c;日本&#xff0c;加拿大&#xff…

2020牛客国庆集训派对day2 MATRIX MULTIPLICATION CALCULATOR

MATRIX MULTIPLICATION CALCULATOR 题意&#xff1a; 求两矩阵相乘 题解&#xff1a; 应该都学过把。。。矩阵相乘 矩阵相乘的前提是两个矩阵的列等于另一个矩阵的行 也就是cij∑aik*bkj 原理很简单注意格式&#xff0c;但是我遇到一个玄学问题。。。 就是卡格式了。。我人…