CF思维训练
创始人
2024-02-29 23:19:05

今天的澳门VP贡献太小了,但是实在是没什么可做的,不好写。

C - Set Construction
题意:你需要构造n个集合,集合里数的值域是1到n,给定了一个n*n大小的01矩阵,对于矩阵上是1的位置代表了集合i是集合j的真子集,请你构造出n个不同的集合。

显然,这里入度最大的一个集合就是最大的集合。

1.为了保证集合的不同,我们可以对于n个集合每个集合插入一个1-n之中不同的数字作为初始化。

2.对于1,代表一个边,链接i到j,j的入度+1,根据构建的图进行拓扑排序,将拓扑序低的点代表的集合插入到父级拓扑序的集合里。

#include using namespace std;
const int N = 10000+100;
struct node
{int nex,to;
}edge[N<<1];
int head[N],tot;
int n;
int rd[N];
set s[N];
void add(int from,int to)
{edge[++tot].to=to;edge[tot].nex=head[from];head[from]=tot;
}
void init()
{for(int i=1;i<=n;i++)s[i].clear(),rd[i]=head[i]=0;for(int i=1;i<=tot;i++)edge[i].to=edge[i].nex=0;tot=0;
}
void topsort()
{for(int i=1;i<=n;i++){s[i].insert(i);}queue q;for(int i=1;i<=n;i++){if(!rd[i])q.push(i);}while(!q.empty()){int now=q.front();q.pop();for(int i=head[now];i;i=edge[i].nex){int to=edge[i].to;rd[to]--;for(auto x:s[now])s[to].insert(x);if(!rd[to]){q.push(to);}}}
}
signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t;for(cin>>t;t;t--){cin>>n;init();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){char c;cin>>c;if(c=='1'){add(i,j);rd[j]++;}}}topsort();for(int i=1;i<=n;i++){cout<

C. Zero-Sum Prefixes
题意:一个数组,对于这个数组为0的地方可以变成任意的元素,那么请你替换合理的元素,求出这个数组的前缀和数组为0的元素的个数的最大值是多少。

思路:我们只需要对于每个a[i]为0的位置修改,那么相邻的这样的两个位置中间的这段元素就可以处理为0,我们尽可能处理这段元素中值相同的个数最多的即可。不要忘了前面的一段可以不用特殊处理就可以得到0的前缀和部分。

#include 
#define int long long
#define endl '\n'using namespace std;
const int N=2e5+5;
int sum[N];
int a[N];
signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t;for(cin>>t;t;t--){int n;cin>>n;vector v;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=a[i]+sum[i-1];if(a[i]==0)v.push_back(i);}v.push_back(n+1);int ans=0;for(int i=1;imapmp;int maxx=0;for(int j=v[i-1];jmp[sum[j]]++;if(mp[sum[j]]>maxx)maxx=mp[sum[j]];}ans+=maxx;}for(int i=1;i

B - Elimination of a Ring

题意:给定n个数的环形数组,相邻的两数如果值相同则会自动消除,现在我们每次可以抽出其中的一个元素,抽出后元素自动补齐,请你求出最多能进行多少次抽出操作。

思路:如果整个数组不是只有两种数,那么肯定有一种方案可以使得每次抽出一个数后其他数不会自动消失,最终让所有数都落单,再慢慢抽取,所以答案应该是n。

如果只有两种数,那么必然是交替放置的,推导证明可得答案必为(n - 2) / 2 + 2

#include
#include
#include
using namespace std;
using LL = long long;
const int maxn = 105;
int a[maxn];int main(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int T;cin >> T;while(T--){int n;cin >> n;set s;for(int i = 0; i < n; i++) cin >> a[i], s.insert(a[i]);if (s.size() == 2)cout << (n - 2) / 2 + 2 << '\n';else cout << n << '\n';}}

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...