前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces Round 502(Div.1 + Div.2)

Codeforces Round 502(Div.1 + Div.2)

作者头像
Cell
发布2022-02-25 15:12:30
9850
发布2022-02-25 15:12:30
举报
文章被收录于专栏:Cell的前端专栏

A. The Rank

题目大意: 给出 n 个学生的成绩,Thomas Smith 的成绩是第一行,然后要按总成绩进行排序,总分相同的按编号从小到大排; 开始看还以为要写 sort 的 cmp 函数进行多条件排序,敲完才发现其实只要按总分就可以了,因为托马斯的 id 是一,必然会排在前面。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

#include<bits/stdc++.h> using namespace std; int a[4],sum[1005]; int main(){ int n,s,f1; cin>>n; for(int j=1;j<=n;j++){ s=0; for(int i=0;i<4;i++){ cin>>a[i]; s+=a[i]; } sum[j]=s; if(j==1) f1=s; } sort(sum+1,sum+n+1,greater<int>()); for(int i=1;i<=n;i++) if(sum[i]==f1){ cout<<i<<endl; break; } return 0; }

B. The Bits

题目大意: 先给出二进制数的长度,然后输入两个二进制数 a,b,问交换 a 中的某些位数的数,使得 a|b(按位或)的结果不同,求有多少种不同的或值。

a,b 上下对应的情况:a/b

个数

1/0

m

0/0

n

1/1

x

0/1

y

用组合数学的思想来想: 只要看 b 为 0 的位就行了,如果 0/0,a 只能换 1 的位置,为了避免重复,所以这里总数为n*x, 再考虑 1/0 的情况,只能和 0 的位置换,这是后可以把 0/0 没算的都算上,所以总数m*(n+y) 所以最后总数为sum=n*x+m*(n+y)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

#include<bits/stdc++.h> using namespace std; int main(){ long long n,m,x,y,t; n=m=x=y=0; char a[100005],b[100005]; cin>>t; cin>>a>>b; for(int i=0;i<t;i++){ int p=a[i]-'0'; int q=b[i]-'0'; if(p==0&&q==0) n++; if(p==1&&q==0) m++; if(p==1&&q==1) x++; if(p==0&&q==1) y++; } long long sum=n*x+m*(y+n); cout<<sum<<endl; return 0; }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A. The Rank
  • B. The Bits
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档