AtCoder Beginner Contest 081
来源:互联网 发布:php开发实例大全 编辑:程序博客网 时间:2024/05/19 09:13
AtCoder Beginner Contest 081
题目链接:https://abc081.contest.atcoder.jp/
总结:四道题较为简单,比赛时切完三题rank41,然后D题读错题,一直挂机到结束,rank60,+200分。
A题:签到题,直接读入字符串判断每个字符的1的个数输出即可。
AC代码:
1 #include<iostream> 2 using namespace std; 3 char s[4]; 4 int main() 5 { 6 cin>>s; 7 int sum=0; 8 for(int i=0;i<=2;i++) 9 {10 if(s[i]=='1')sum++;11 }12 cout<<sum<<endl;13 return 0;14 }
B题:直接暴力即可,用另一个数组b[n]存每个数能/2的次数,排序输出b[1]即可。
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int n; 5 const int maxn = 205; 6 int a[maxn]; 7 int b[maxn]; 8 int main() 9 {10 cin>>n;11 for(int i=1;i<=n;i++)12 {13 cin>>a[i];14 if(a[i]&1)b[i]=0;15 else16 {17 int k = 0;18 while(a[i]%2==0)19 {20 a[i]/=2;21 k++;22 }23 b[i]=k;24 }25 }26 sort(b+1,b+1+n);27 cout<<b[1]<<endl;28 return 0;29 }
C题题意:给定一个数组a[n]和k,求最少删去多少个数使得数组a中只有k个相同的数。
题解:因为a[i]<200000,所以记录每个数出现的次数,统计一个有多少个不同的数出现。排序之后从出现的第一个数的次数加到第n-k个数出现的次数就是最少删去的数量。
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 200005; 7 int a[maxn]; 8 int n,k,x; 9 map<int,int> Q;10 int main()11 {12 cin>>n>>k;13 int now = 0;14 for(int i=1;i<=n;i++)15 {16 a[i]=0;17 }18 for(int i=1;i<=n;i++)19 {20 cin>>x;21 a[x]++;22 if(!Q.count(x))23 {24 Q[x]=1;25 now++;26 }27 }28 sort(a+1,a+1+n);29 int sum = 0;30 for(int i=n-now+1;i<=n-k;i++)31 {32 sum+=a[i];33 }34 cout<<sum<<endl;35 }
D题题意:给定一组数,可以进行使ax=ax+ay的操作。求一个方法使得2N次操作内将数组变为不下降序列。(比赛时读错题,以为求最小操作次数。)
题解:如果都是正数,那么每个数加前一个数必定符合要求,即a1,a1+a2,a2+a3,a3+a4...,负数同理,只不过是反向加回来。如果有正负数,判断一下最大数和最小数的绝对值谁大,给每个数加上绝对值最大的数即可转换为符号相同的数组,求法同上。
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 #include<map> 6 using namespace std; 7 const int maxn = 55; 8 int x[maxn]; 9 int n;10 map<int,int> Q;11 int main()12 {13 cin>>n;14 int sum = 0;15 int max1 = -1e6-5;16 int min1 = 1e6+5;17 int now = 0;18 for(int i=1;i<=n;i++)19 {20 cin>>x[i];21 Q[x[i]]=i;22 max1 = max(max1,x[i]);23 min1 = min(min1,x[i]);24 }25 if(abs(min1)>abs(max1))now = 1;26 if(min1<=0&&max1>=0)27 {28 cout<<2*n-1<<endl;29 for(int i=1;i<=n;i++)30 {31 if(now)cout<<Q[min1]<<" "<<i<<endl;32 else cout<<Q[max1]<<" "<<i<<endl;33 }34 }35 else cout<<n-1<<endl;36 if(now)37 {38 for(int i=n;i>1;i--)39 {40 cout<<i<<" "<<i-1<<endl;41 }42 }43 else44 {45 for(int i=2;i<=n;i++)46 {47 cout<<i-1<<" "<<i<<endl;48 }49 }50 return 0;51 }
阅读全文
0 0
- AtCoder Beginner Contest 081
- AtCoder Beginner Contest 081
- AtCoder Beginner Contest 081 D
- AtCoder Beginner Contest 081 C
- AtCoder Beginner Contest 081 D
- AtCoder Beginner Contest 055
- AtCoder Beginner Contest 052
- AtCoder Beginner Contest 057
- AtCoder Beginner Contest 063
- AtCoder Beginner Contest 069
- AtCoder Beginner Contest 069
- AtCoder Beginner Contest 070
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 073
- AtCoder Beginner Contest 072
- AtCoder Beginner Contest 075
- druid的简单使用
- codeforces 900A. Find Extra One
- 如何在Eclipse下查看JDK源代码以及java源代码阅读方法
- OpenCV、OpenCL、OpenGL、OpenMP
- leetcode 477. Total Hamming Distance 任意两个数字的汉明距离之和
- AtCoder Beginner Contest 081
- 用python修改dns解析文件
- 12.12笔记
- 专项支出用款申请单:全民学Excel第六季
- Mathematical Statistics and Data Analysis笔记
- JAVA项目工程导入.jar包
- 三子棋(c语言) 棋盘大小可随意
- CNN 卷积神经网络结构
- Effective Java之通过私有构造器强化不可实例化能力(四)