当前位置: 首页 > news >正文

Codeforces Round 1058 (Div. 2)(A-D)

题目链接:Dashboard - Codeforces Round 1058 (Div. 2) - Codeforces

A. MEX Partition

题意

给你一个数组,将其分成若干个子集,每个子集求mex,要求相等且最小

思路

个人感觉题目比较难懂,平常A差不多2分钟以内开,这个大概6分钟才开出来,(比较绕只能说自己太菜了)

如果数组种没有0的,那么无论怎么划分,所有子集都是0,输出0即可,如果有0的话就再想一下,我们始终要把下一个mex均分到所有子集不然就不能够相等

所以我们最终得出结论就是求整个数组的mex即可

代码

void solve(){int n;cin>>n;vi a(n+1);map<int,bool> mp;for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]=true;}int mex=0;while(mp[mex]) mex++;cout<<mex<<"\n";
}

B. Distinct Elements

思路

b_i=f(a[1,i])+f(a[2,i])+...f(a[i,i])

观察此式子,f(a[1,i])指的是[1,i]区间内不同数的数量,那么显然我们没法根据这个来确认a的值,我们不妨通过递推的角度观察b数组,用cal(a[l,r],x)表示x是否在a[l,r]种出现过

b_1=1 显然这是必然的

b_2=b_1+cal(a[1,1],a[2])+f(a[2,2]),显然f(a[i,i])=1以下用1表示

b_3=b_2+cal(a[1,2],a[3])+cal(a[2,2],a[3])+1

b_4=b_3+cal(a[1,3],a[4])+cal(a[2,3],a[4])+cal(a[3,3],a[4])+1

那么观察一下可以得到以下结论

1.如果cal(a[l,r],x)=1,那么cal(a[L,r],x)都为1 其中L>l

2.如果cal(a[l,r],x)=0且cal(a[l+1,r],x)=1,那么x=a[l]

所以递推地从[1->n]开始填数,根据b_i-b_{i-1}来填写a[i]的值即可

代码

#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 vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;void solve(){int n;cin>>n;vi b(n+1);for(int i=1;i<=n;i++){cin>>b[i];}vi ans(n+1);int now=1;    //用于填数ans[1]=1;for(int i=2;i<=n;i++){int cnt=b[i]-b[i-1];if(b[i]-b[i-1]==i){ans[i]=++now;}else{ans[i]=ans[i-cnt];}}for(int i=1;i<=n;i++){cout<<ans[i]<<" \n"[i==n];}
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

C. Reverse XOR

思路

做这种题当然要打表了!

然后你就会发现所有能够得到的n在二进制下都满足:对称结构+若干个(可为0)0

例如:1100,1111,101010100

对称的结构很明显能够得到,但0又是怎么回事,就拿1100来说其实是由110111或者111011得来的

自己模拟一下其实就明白怎么回事了

注意:如果右半边对称结构是个奇数个中间不能为1,这也很好理解吧,不然就会和我一样WA一发了(0_0)

代码

#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 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;bool check(vi& res){int n=res.size();if(n%2&&res[n/2]==1) return true;return false;
}void solve(){int n;cin>>n;while(n){if(n&1) break;n/=2;}vi res;while(n){res.push_back((n&1));n/=2;}int m=res.size();if(m==0){cout<<"YES\n";return;}if(check(res)){cout<<"NO\n";return;}for(int i=0;i<m/2;i++){if(res[i]!=res[m-i-1]){cout<<"NO\n";return;}}cout<<"YES\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

D. MAD Interactive Problem

思路

虽然放到了D题但我个人感觉好像并不难

首先跑一遍数组,即询问2n次,每次加进i来,如果为0则放在询问序列里面,不为0则说明该位置其值为询问回复的答案。

因此我们经过2n次询问就可以将n个未确认的数和n个已经确认的数给得到了,那么剩下的只需要再询问n次,即拿已经确认的序列来不断加一个未确认的数询问一次即可知道其值

这样正好3*n次询问

代码

#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 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;int query(vi& v){cout<<"? "<<v.size()<<" ";for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}cout<<endl;int res;cin>>res;return res;
}void solve(){int n;cin>>n;vi ans(2*n+1);vector<int> res;    //不断维护查询为0的序列vector<int> q;  //记录所有确认的位置for(int i=1;i<=2*n;i++){res.push_back(i);int x=query(res);if(x!=0){ans[i]=x;q.push_back(i);res.pop_back();}}//res里面全是未确认的for(int i=0;i<res.size();i++){q.push_back(res[i]);int x=query(q);ans[res[i]]=x;q.pop_back();}cout<<"! ";for(int i=1;i<=2*n;i++){cout<<ans[i]<<" ";}cout<<endl;
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

http://www.dtcms.com/a/483249.html

相关文章:

  • SQL Server 2019实验 │ 高级查询
  • 建站宝盒建站系统网站管理建设需进一步加强
  • 网站开发步骤网站备案身份核验
  • Linux中paging_init页表初始化函数的实现
  • 端侧大模型推理笔记
  • 可以建立网站的平台seo专业课程
  • 网站在那里备案企业信息管理系统的设计与实现
  • 设备管理系统原型设计实战:PC/APP/PDA多端页面解析
  • 西安建设教育网站wordpress homepage
  • Transformer-输入部分
  • Python接口与抽象基类详解:从规范定义到高级应用
  • 免费网站建设价格费用.net做网站用什么的多
  • 专业高端网站建设服务公司百度指数趋势
  • AI商品换模特及场景智能化
  • 网站开发定制推广杭州视频在线生成链接
  • 异步任务使用场景与实践
  • 300多个Html5小游戏列表和下载地址
  • 企业门户网站方案建网站有报价单吗
  • 企业网站开发价钱低免费开个人网店
  • 建网站软件下载那个软件可以做三个视频网站
  • Excel使用教程笔记
  • 论文阅读《LIMA:Less Is More for Alignment》
  • wordpress 网站暂停app建设网站
  • 考研408--组成原理--day1
  • 网络公司构建网站杭州旅游团购网站建设
  • 【数值分析】非线性方程与方程组的数值解法的经典算法(附MATLAB代码)
  • 文件外链网站智慧团建官网登录入口电脑版
  • 如何在Windows上为Java配置多个版本的环境变量
  • 如何将自己做的网站放到网上去如何做电商创业
  • 杭州市建设信用网郑州优化网站关键词