Pinely Round 1 (Div. 1 + Div. 2)
创始人
2024-03-15 20:04:47
0

比赛链接:Dashboard - Pinely Round 1 (Div. 1 + Div. 2) - Codeforces

A:思维

题意:定义了一个序列,给定了三个整数n,a,b。问能否构造两个长度为n的序列,使得它们的最长前缀的长度为a,最长后缀为b。能构造则YES,否则NO

思路:认真读题你就会发现。a和b是有关系的。为什么?

仔细思考一下,要使得前缀长度为a,两个序列在a+1位置上的数就必须要不同,从而断开,使得前缀长度为a。后缀也同理。

那么,断开的条件是什么?才能使得构造成功呢?

结论:m>=2。为什么?

必须满足a+1为断点,b-1为断点才能构造成功。

当然,这里还有一个特判

当n=a=b,那么就说明两个序列是相同的,一定可以构造成功 

代码:

#include
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e3+10;
typedef pairPII;inline void solve(){int n,a,b;cin>>n>>a>>b;if(n==a&&n==b){cout<<"Yes\n";return;}if(n-(a+b)>=2) cout<<"Yes\n";else cout<<"No\n";
}signed main(){fast;int T;cin>>T;while(T--) solve();
}

B:结论

题意:给定一个环形数组,每次可以删除一个数,删除后的位置会合并掉。如果合并后存在两个相同的数字相邻,那么其中一个数会被立刻消除。每次操作可以删除一个数,求最多消除几次可以使得数组为空。

结论:

数的种类>=3,ans=n

数的种类==2,ans=\frac{n}{2}+1

数的种类==1,ans=1

代码:

#include
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e3+10;
typedef pairPII;inline void solve(){int n;cin>>n;int cnt=0;//记录种类数mapmp;for(int i=1;i<=n;i++){int x;cin>>x;if(mp[x]==0) cnt++;mp[x]++;}if(n==1) cout<<"1\n";else if(cnt==2) cout<=3) cout<>T;while(T--) solve();
}

C:构造

题意:给定一个 n∗n 的 01 矩阵,要求构造 n 个满足要求的集合 A1,A2,A3,...,An ,使得 bij=1 的时候,集合 Ai 是集合 Aj 的真子集。

思路:先扫一遍矩阵。当碰见{b_{ij}}^{}=1的时候 ,我们就将Ai中的元素全部放进Aj中。在放的时候,会出现Ai中的元素被更新的情况,这个时候再扫一遍即可。

代码:

#include
#define all(v) v.begin(),v.end()
#define int long long
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pi acos(-1)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e3+10;
typedef pairPII;
char b[N][N];inline void solve(){setse[N];int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>b[i][j];se[i].insert(i);}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(b[i][j]=='1'){for(auto x:se[i]){se[j].insert(x);}}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(b[i][j]=='1'){for(auto x:se[i]){se[j].insert(x);}}}}for(int i=1;i<=n;i++){cout<>T;while(T--) solve();
}

 

 

 

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...