Codeforces Round 994 (Div. 2)(A-D)
上链接:Dashboard - Codeforces Round 994 (Div. 2) - CodeforcesA. MEX Destruction
思绪
显然如果全是0则输出0,如果非零的子数组只有一块输出1,别的的输出2
代码
#include<bits/stdc++.h>
using namespace std;
#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ull unsigned long long
#define bit __builtin_popcountll
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;
void solve(){
int n;
cin>>n;
vi a(n+10);
bool flag=false;
for(int i=1;i<=n;i++){
cin>>a;
if(a) flag=true;
}
if(flag==false){
cout<<"0\n";return;
}
int ct=0;
bool f=true;
for(int i=1;i<=n;i++){
if(a){
if(f==true){
f=false;
ct++;
}
}
if(a==0){
f=true;
}
}
if(ct<=1){
cout<<"1\n";return;
}
cout<<2<<"\n";
}
signed main() {
vcoistnt
int _=1;
cin>>_;
while(_--) solve();
return 0;
} B. pspspsps
思绪
根据题意可以发现左端是's'与右端是'p'对结果没有影响,别的的情况的话如果同时出现了s和p那么就必然是不能够成立的
代码
#include<bits/stdc++.h>
using namespace std;
#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ull unsigned long long
#define bit __builtin_popcountll
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;
const int N=2e5+10;
const int INF=0x3f3f3f3f3f3f3f3f;
const int inf=INT_MIN;
const int mod=998244353;
const int base=283;
void solve(){
int n;
cin>>n;
string s;
cin>>s;
s=" "+s;
int t=1;
if(s=='s') t++;
if(s=='p') n--;
bool fs=false,fp=false;
for(int i=t;i<=n;i++){
if(s=='s') fs=true;
if(s=='p') fp=true;
}
if(fs&&fp){
cout<<"NO\n";
}else{
cout<<"YES\n";
}
}
signed main() {
vcoistnt
int _=1;
cin>>_;
while(_--) solve();
return 0;
} C. MEX Cycle
思绪
构造题,提供一种构造方法
先不管标题中(此外,龙 x 和 y 彼此是朋友)这个条件对a数组进行构造,
偶数:101010...10 奇数:101010...102
然后将(此外,龙 xx 和 yy 彼此是朋友)这个条件加进去,如果a!=a那么显然是不用改变的,否则又要分为奇数和偶数的情况
奇数:把x的反面插入一个2,把最后的2删掉即可
偶数:这里又分为两种情况,当y==n就把第一个1删掉并且再末尾加个2就行了,否则将x反面插入个2再对原来的a数组进行调解
代码
#include<bits/stdc++.h>
using namespace std;
#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ull unsigned long long
#define bit __builtin_popcountll
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;
const int N=2e5+10;
const int INF=0x3f3f3f3f3f3f3f3f;
const int inf=INT_MIN;
const int mod=998244353;
const int base=283;
void solve(){
int n,x,y;
cin>>n>>x>>y;
vi a(n+10);
for(int i=1;i<=n;i++){
a=i%2;
}
if(n%2) a=2;
if(a==a){
if(a==2){
for(int i=1;i<n;i++){
if(i==x) cout<<a<<" 2 ";
else{
cout<<a<<" ";
}
}cout<<"\n";
return;
}else{
if(y!=n){
for(int i=1;i<n-1;i++){
if(i==x){
cout<<a<<" 2 ";
}else
cout<<a<<" ";
}
cout<<"2";
cout<<"\n";
return;
}else{
for(int i=2;i<=n;i++){
cout<<a<<" ";
}
cout<<"2\n";return;
}
}
}
for(int i=1;i<=n;i++){
cout<<a<<" \n";
}
}
signed main() {
vcoistnt
int _=1;
cin>>_;
while(_--) solve();
return 0;
} D. Shift + Esc
思绪
dp,如果去掉移动前实行的操作的话,那么这个题就变成了普通的状态转移题,那么思量在此底子上新增状态达到此题的目的
令 dp 表示到达(i,j)时第i行进行了k次操作所能到达的最小代价,(i,j)状态可以由(i-1,j)和(i,j-1)转移过来的,
(i,j-1):显然是由 dp+a[(j+k-1)%m+1] 转移过来的;
(i-1,j):是由f+a[(j+k-1)%m+1] 转移而来,f(i,j)表示到达(i,j)位置时的最小代价
那么答案即f
代码
#include<bits/stdc++.h>
using namespace std;
#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ull unsigned long long
#define bit __builtin_popcountll
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;
const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;
void solve(){
int n,m,w;
cin>>n>>m>>w;
vector<vi> a(n+10,vi(m+10));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a;
}
}
vector< vector< vector<int> > > dp(n+10,vector<vector<int>>(m+10,vector<int>(m+10,inf)));
vector<vi> f(n+10,vi(m+10,inf));
f=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<m;k++){
dp=min(f+k*w+a[(j+k-1)%m+1],dp+a[(j+k-1)%m+1]);
f=min(f,dp);
}
}
}
cout<<f<<"\n";
}
signed main() {
vcoistnt
int _=1;
cin>>_;
while(_--) solve();
return 0;
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]