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

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

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

A. Circle of Apple Trees

思路

相同的数只能吃一次

代码

void solve(){int n;cin>>n;map<int,bool> mp;int cnt=0;for(int i=1;i<=n;i++){int x;cin>>x;if(!mp[x]) cnt++;mp[x]=true;}cout<<cnt<<"\n";
}

B. Bitwise Reversion

思路

感觉类似于贪心,观察这三个式子

  • a&b=x
  • b&c=y
  • a&c=z

我们不妨先填成

  • x&x=x
  • y&y=y
  • z&z=z

这样就能够很容易想到,因为是&我们必须保证a有x以及z中二进制下所有的1即 a= x | z

同理,b=x|y , c=y|z

最后检查一下上面式子是否成立即可

代码

void solve(){int x,y,z;cin>>x>>y>>z;int a=(x|z);int b=(x|y);int c=(y|z);if(((a&b)==x)&&((b&c)==y)&&((a&c)==z)){cout<<"YES\n";}else{cout<<"NO\n";}
}

C. Symmetrical Polygons

思路

贪心地去看一共有三种情况:

1.全是成对的边

成立条件:除了只有一对的情况,其余的都能够成立

2.有一条不是成对的边

成立条件:x<sum        x为独立边的长度,sum为所有成对边的边长和

3.有两条不是成对的边

成立条件:x-y<sum(x>y)        x为较长的独立边,y为较短的,sum为所有成对边长和

以上三种情况都考虑贪心即可求出最终答案

代码

#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;void solve(){int n;cin>>n;vi a(n+1);map<int,int> mp;for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]++;}int sum=0;vi res;    //记录单个边int ct=0;for(auto [x,cnt]:mp){sum+=(cnt/2)*2*x;ct+=(cnt/2);if(cnt%2){res.push_back(x);}}sort(res.begin(),res.end(),greater<int>());int s=0;int ans=sum;for(int i=0;i<res.size();i++){if(res[i]<sum){s=res[i];break;}}if(res.size()>=2){for(int i=1;i<res.size();i++){if(res[i-1]-res[i]<sum){s=max(s,res[i-1]+res[i]);}}}if(ct==1&&s==0){cout<<"0\n";return;}cout<<ans+s<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

D. Not Alone

思路

圆形很难考虑我们把他弄成条形的即可,贪心的找断开的位置,找到abs(a[i]-a[i-1])最小的位置,为保证准确性我们最好左右位置都跑一遍dp, 防止出现1 1 1 100 10 1 1 而断开位置在n前面

对于条形的数组来看,是由大小为2和3的块组成的,所以dp就很好想了

代码

#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 n;
int f(int id,vi& a){vi res;for(int i=id;i<=n;i++){res.push_back(a[i]);}for(int i=1;i<id;i++){res.push_back(a[i]);}vector<int> dp(n+1,inf);dp[0]=0;for (int i=2;i<=n;i++) {if (dp[i-2] != inf) {int cost = abs(res[i - 2] - res[i - 1]);dp[i] = min(dp[i], dp[i - 2] + cost);}if (i >= 3 && dp[i - 3] != inf) {int mi= min({res[i - 3], res[i - 2], res[i - 1]});int mx=max({res[i - 3], res[i - 2], res[i - 1]});int cost=mx-mi;dp[i] = min(dp[i], dp[i - 3] + cost);}}return dp[n];
}void solve(){cin>>n;vi a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}int id=0;int mn=inf;for(int i=1;i<=n;i++){int x=a[i];int y=(i==n?a[1]:a[i+1]);if(mn>abs(x-y)){id=i;mn=abs(x-y);}}int ans;int eid=(id==n?1:id+1);int sid=(id==1?n:id-1);ans=min({f(sid,a),f(id,a),f(eid,a)});cout<<ans<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

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

相关文章:

  • 微信网站备案wordpress step2
  • XSS 漏洞全解析:从原理到实战
  • 傻瓜式 建网站软件外包公司人数
  • Nestjs service 对应token的作用范围
  • Google 智能体设计模式:评估与监控
  • 如何屏蔽网站ipwordpress 商城模板下载
  • OpenMM 8 安装与上手指南
  • 网站建设跟网站开发有什么区别吗832网络销售平台
  • 力扣热题100道49字母异位词分组
  • sql优化进阶
  • 网站灰色建设网销怎么找客户资源
  • 库易网网站郑州网站关键词优化公司
  • n8n Code节点模式选择指南:Run Once for All Items与Run Once for Each Item
  • 河南怎样做网站推广怎样设置自己的网站
  • 手写MyBatis第102弹:MapperBuilder与MapperAnnotationBuilder的双重解析机制深度剖析
  • Java知识点储备
  • C++ : AVL 树之 左右双旋(第三章)
  • 查询类网站开发建设网站公司怎么收费
  • 电影发布网站模板WordPress云虚拟空间
  • Android获取外部存储目录
  • AUTOSAR模块架构
  • 简单易做的网站一级域名二级域名区别
  • 一个可计算宇宙模型:热力学规则驱动量子化弹性两层底空间演化的可编程物理模拟自动机设计-从量子过程到数值相对论模拟
  • 编程语言的选择策略:从C语言的OOP到AI与GUI开发的全方位对比
  • 网站 案例展示泗洪做网站公司
  • 做竞拍网站合法吗有谁认识做微网站的
  • 运行smolvlm解析视频
  • 【力扣】hot100系列(三)链表(一)(图示+多解法+时间复杂度分析)
  • 【Linux】linux基础指令入门(1)
  • 广东网站制作公司校园网站建设结论