1490E. Accidental Victory(二分)

题意:

一共n个人参加比赛,每个人有一个强壮值。
每次随机挑选两人pk,赢的人获得另一人的强壮值。如果强壮值相同,随机赢。
问,最终有哪些人有赢的可能性?

思路:

也就是问,有哪些人必输了。
一个人所得的到的最大强壮值为比其小的所有强壮值之和。

法1:
将所有人从小到大排序。
对于一个位置的前缀和如果不少于下一位置的值,说明当前位置可以胜过下一位置。
如果不能,说明当前位置以及前面所有位置都没有赢的可能。
找出最后一个不会赢的位置。

法2:二分
因为当前位置如果有赢的可能的话,后面的位置一定能赢,所以可以二分第一个能赢的位置。

Code:

const int N = 200010, mod = 1e9+7;
int T, n, m;
PII a[N];bool check(int mid)
{ll sum=a[mid].first;for(int i=1;i<=n;i++){if(i==mid) continue;if(a[i].first<=sum) sum+=a[i].first;else return 0; }return 1;
}int main(){Ios;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].first;a[i].second=i;}sort(a+1,a+n+1);/*法1: ll sum=0,f=0;for(int i=1;i<n;i++){sum+=a[i].first;if(sum<a[i+1].first) f=i;set<int> st;for(int i=f+1;i<=n;i++) st.insert(a[i].second);cout<<st.size()<<endl;for(auto it:st){cout<<it<<" ";}cout<<endl;}*/int l=1,r=n;while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}set<int> st;for(int i=l;i<=n;i++) st.insert(a[i].second);cout<<st.size()<<endl;for(auto it:st){cout<<it<<" ";}cout<<endl;}return 0;
}

448B. Suffix Structures(双指针)

题意:

给定两个字符串a,b,分别判断下列操作是否a能够变为b:
1.只交换两个字符的位置。
2.只删除某些字符。
3.同时使用前面两种操作。

思路:

判断只删除的时候,需要双指针判断b串在a串中,相对顺序不变的出现过。
只交换,判断是否出现次数相同。

Code:


const int N = 200010, mod = 1e9+7;
int T, n, m;
string a,b;int main(){cin>>a>>b;n=a.size(),m=b.size();a=" "+a,b=" "+b;int cnt=0;for(int i=1,j=1;i<=m;i++){while(j<n&&a[j]!=b[i]) j++;if(a[j]==b[i]) cnt++,j++;}if(cnt==m&&n!=m){cout<<"automaton";return 0;}for(int i=1;i<=n;i++) mp[a[i]]++;bool flag=0;for(int j=1;j<=m;j++){if(!mp[b[j]]){flag=1;break;}mp[b[j]]--;}if(flag){cout<<"need tree";return 0;}if(n==m){cout<<"array";}else cout<<"both";return 0;
}

1462D. Add to Neighbour and Remove(思维,枚举答案)

题意:

给定一个长度为 n 的数列,问最少多少次下述操作,各位置元素相等?
选一个位置i,将ai的值加到位置 i-1 或 i+1 上;将位置i删除,后面的元素递补。

思路:

其实,上面的操作其实就是将若干个连续的位置合并为1个位置,变成一个新的数列。
让合并后的所有元素相同。所以我们可以枚举最后所有元素变成的值。
但是整个范围太大了。

但是 1~i 个位置肯定是要合并为1个位置的,所以我们可以枚举第一组合并的位置个数i。
让这组的值作为最后所有元素的值,判断是否能行通。如果能,答案取最小操作数。

Code:

const int N = 200010, mod = 1e9+7;
int T, n, m, a[N];
ll sum;
int ans;void check(int m)
{sum=0;for(int i=1;i<=m;i++) sum+=a[i];ll t=0;int cnt=m-1;for(int i=m+1;i<=n;i++){t+=a[i];cnt++;if(sum==t) t=0,cnt--;else if(t>sum) return;}if(t!=0) return;ans=min(ans,cnt);
}int main(){Ios;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];ans=1e9;for(int len=1;len<=n;len++){check(len);}cout<<ans<<endl;}return 0;
}

650A. Watchmen(组合)

题意:

给出若干个点,判断有多少对点的两种距离的求算方式所得的结果相同?

思路:

化简等式得,(xi-xj)(yi-yj)=0
所以满足方式的点对,要么x相同,要么y相同,要么都相同。

所以可以求出满足x相同的点对数+y相同的点对数,再减去x和y都相同的点对数

Code:

const int N = 200010, mod = 1e9+7;
int T, n, m, a[N];int main(){Ios;cin>>n;for(int i=1;i<=n;i++){int p,q;cin>>p>>q;x[p]++,y[q]++;mp[{p,q}]++;}ll ans=0;for(auto it:x){ll cnt=it.second;ans+=cnt*(cnt-1)/2;}for(auto it:y){ll cnt=it.second;ans+=cnt*(cnt-1)/2;}for(auto it:mp){ll cnt=it.second;ans-=cnt*(cnt-1)/2;}cout<<ans;return 0;
}

这时候想起来先变形公式了。。


1380B. Universal Solution(思维)

题意:

给定一个字符串a,三种字符:RSP,对应石头、剪刀、布。
可以从一个位置开始循环,输出。
构造一个字符串b,从1开始输出,使得a串分别从n个位置开始循环,通过字符串b顺序输出所得的赢的次数的平均值最大。

思路:

构造字符串b的所有字符为a串中出现最多的字符的敌人。
每次都收割a串中出现次数多的字符的个数。

大胆假设!!

Code:

const int N = 200010, mod = 1e9+7;
int T, n, m;
string a;int main(){Ios;cin>>T;while(T--){cin>>a;int cnt1=0,cnt2=0,cnt3=0;for(int i=0;i<a.size();i++){if(a[i]=='R') cnt1++;else if(a[i]=='S') cnt2++;else cnt3++;}int maxa=max(cnt1,max(cnt2,cnt3));char c;if(cnt1==maxa) c='P';else if(cnt2==maxa) c='R';else c='S';for(int i=0;i<a.size();i++) cout<<c;cout<<endl;}return 0;
}

1451C. String Equality(思维)

题意:

给定长度为n的字符串a,b。给定长度m。通过下面的操作,判断串a能否变换成串b?

  • 交换两个字符的位置。或

  • 选择长度为m的,全部元素都相同的子串,将其全部元素+1。(例’b’变为’c’)

思路:

因为位置能随意变换,所以连续的元素相同的位置不用管。
分别统计出串a、串b中每个元素出现的次数。
遍历串a中每种元素,判断其个数是否大于m:
如果是,就可以将b中的第一个比其大的字符的个数消去m个;
如果不是,就需要b中有一个和该字符相同的字符。如果没有,不合要求。

最后判断是否b中的元素都被消掉了,个数都为0。如果不是,不合要求。

Code:

const int N = 1000010, mod = 1e9+7;
int T, n, m;
char a[N],b[N];
char c[N],d[N];int main(){Ios;cin>>T;while(T--){mp1.clear();mp2.clear();cin>>n>>m;cin>>a+1;cin>>b+1;sort(a+1,a+n+1);sort(b+1,b+n+1);for(int i=1;i<=n;i++) mp1[a[i]]++;for(int i=1;i<=n;i++) mp2[b[i]]++;int ans=0;for(auto it:mp1){while(it.second>=m){bool flag=0;for(int i=it.first-'a';i<26;i++){char c='a'+i;if(mp2[c]>=m){mp2[c]-=m;flag=1;break;}}if(!flag){ans=-1;break;}it.second-=m;}if(ans==-1) break;if(it.second){if(mp2[it.first]>=it.second) mp2[it.first]-=it.second;else{ans=-1;break;}}}for(auto it:mp2){if(it.second) ans=-1;}if(ans==-1) cout<<"No\n";else cout<<"Yes\n";}return 0;
}

CF1400:1490E、448B、1462FD、650A、1380B、1451C相关推荐

  1. linux内核和cpu指令集,Linux之父:Intel别浪费时间在AVX512这类指令集、多堆核心才是正道...

    原标题:Linux之父:Intel别浪费时间在AVX512这类指令集.多堆核心才是正道 在最近一次邮件交流中,Linux之父Linus Torvalds对Intel的处理器战略表达意见. 他谈到&qu ...

  2. 任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...

    1.选择器类型 标签选择器,类选择器,ID选择器,组合选择器,伪类和伪元素,属性选择器,子选择器,同胞选择器, :not()选择器 1.同胞选择器 相邻同胞标签: h2 + p{ color:red; ...

  3. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  4. IJCAI 2019:中国团队录取论文超三成,北大、南大榜上有名

    作者 | 神经小姐姐 来源 | HyperAI超神经( ID: HyperAI ) [导读]AI 顶会 IJCAI 2019 已于 8 月 16 日圆满落幕.在连续 7 天的技术盛会中,与会者在工作坊 ...

  5. 面试官问:你来讲下Netty通信中的粘包、拆包?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Java技术剑 来源:https://urlify.cn/I ...

  6. R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息

    R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断.以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签(Time Series Plot For a Yearly Ti ...

  7. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行center中心化、scale标准化(每个数据列减去平均值、除以标准差)、设置参数为center和scale

    R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行center中心化.scale标准化(每个数据列减去平均值.除以标准差).设置method参数为center和scal ...

  8. R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息

    R语言ggplot2可视化:可视化箱图.在箱图中添加抖动数据点(Dot + Box Plot).自定义抖动数据点的大小.颜色.数据点分布在箱图中间.添加主标题.副标题.题注信息 目录

  9. python中使用squarify包可视化treemap图:使用treemap图可视化个人或者集体的股票、基金的持仓结构(treemap with squarify package)

    python中使用squarify包可视化treemap图:使用treemap图可视化个人或者集体的股票.基金的持仓结构(treemap with squarify package) 目录

最新文章

  1. 函数重载和覆盖(重写)的区别
  2. 刚安装完的ubuntu安装谷歌浏览器
  3. shell脚本:批量修改文件名(文件名中添加字符)
  4. highcharts.js两种数据绑定方式和异步加载数据的使用
  5. b站用户画像2020_2020年抖音用户画像专栏报告(上)
  6. 哈希表---开链法解决哈希冲突
  7. 大秦帝国------令人神往的时代
  8. git在回退版本时HEAD~和HEAD^的作用和区别
  9. PLL Simulink行为模型
  10. BI是什么?应用BI工具能给企业带来哪些帮助?
  11. A-Level CS 计算机科学 考试知识点——考试介绍第1章
  12. win10服务器网页打不开怎么办,Win10电脑有网但浏览器打不开网页怎么办?
  13. 7-1 约瑟夫环问题-hebust (10 分)
  14. 什么是RBER(残余误比特率)FER(帧删除率)BER(误比特率)
  15. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通
  16. Linux Update
  17. linux怎样保存文件,linux不能保存文件如何解决
  18. 同一计算机打印机无法连接,打印机无法连接到计算机怎么处理呢?
  19. 网站关键词优化如何优化大量关键词?
  20. java ssm小案例_简易的SSM框架整合小案例

热门文章

  1. Cache数据库入门
  2. 多平台epub阅读器分享
  3. 系统集成方式:数据集成、控制集成
  4. 榆熙科技电商:拼多多买家交易评价内容都包含哪些?
  5. Windows显卡切换
  6. 骨传导耳机低频差理所当然?飞利浦A6606表示不服
  7. 运动耳机有必要买吗、口碑最好的运动耳机品牌排行
  8. 使用Mybatis相关类生成sql语句
  9. 机器学习Numpy库入门25例
  10. 同步MySQL跨库且不同shema表数据