比赛8 总结
来源:互联网 发布:自创麦词软件 编辑:程序博客网 时间:2024/06/08 10:40
- T1
- 题面
- 题意
- 思路
- 代码
- T2
- 题面
- 题意
- 思路
- 代码
- T3
- 题面
- 题意
- 错误思路1
- 超时代码1
- 错误思路2
- 超时代码2
- 正确代码
- T4
- 题面
- 题意
- 代码
- T5
- 题面
- 题意
- 思路
- 代码
- T6
- 题面
- 题意
- 代码
T1
题面
题意
输入n,k,输出k个数,使这些数的乘积为n
思路
分解质因数,之后统计质数个数,若小于k则输出k,否则将多余数乘起来,再输出
代码
#include<bits/stdc++.h>#define ll long longusing namespace std;ll a[10000005],aa,n,k;void fj(ll n){ ll i; for(i=2;i<=n;i++) { if(n%i==0) { aa++; a[aa]=i; n=n/i; i--; } if(n==1) return; }}int main(){ ll i,j,m=1; cin>>n>>k; fj(n); if(aa<k) { cout<<-1; return 0; } else { for(i=1;i<=aa-k+1;i++) { m*=a[i];//多余的数乘起来 } cout<<m<<" "; for(i=aa-k+2;i<=aa;i++) cout<<a[i]<<" "; }}
T2
题面
题意
输入n和长度为n的整数序列,去掉一些数,使剩下的和最大且为奇数.
思路
将大于0的偶数全部相加,再排序奇数,想加大于0的,统计个数,为奇数则输出答案,反之,比较最小正奇数与最大负奇数,再判断是否都加上.
代码
#include<bits/stdc++.h>#define ll long long#define N 100005using namespace std;ll ji[N],ja,n,k,m,mn=N;int main(){ ll i,j,a,b,ans=0; cin>>n; for(i=1;i<=n;i++) { cin>>a; if(a%2==0) { if(a>0) { ans+=a; } } else { ja++; ji[ja]=a; } } sort(ji+1,ji+ja+1); if(ji[ja]<0) { cout<<ans+ji[ja]; return 0; } for(i=ja;i>=1;i--) { if(ji[i]>0) { ans+=ji[i]; k=1-k; } if(ji[i]<0) { if(k==1) { cout<<ans; return 0; } else { if(ji[i]+ji[i+1]>0) { cout<<ans+ji[i]; return 0; } else { cout<<ans-ji[i+1]; return 0; } } } } if(k==1) cout<<ans; if(k==0) { cout<<ans-ji[1]; }}
T3
题面
题意
输入字符串,有一个栈,通过它(仅可入栈与出栈各一次),输出字典序最小的一种.
错误思路1
每次找出最小的字母,标记并输出.再到着输出未输出的字符串.
超时代码1
#include<bits/stdc++.h>#define ll long long#define N 100005using namespace std;int tou,len,m,n;string y;int zd(int t){ int i,b; char c=123; for(i=t;i<=len-1;i++) { if(y[i]<c) { b=i; c=y[i]; } } return b;}void shch(int b){ int i; for(i=b;i<len-1;i++) { y[i]=y[i+1]; } len--;}int main(){ string ans; int i; ans=""; cin>>y; tou=0; len=y.size(); while(tou!=len-1) { m=zd(tou); ans+=y[m]; tou=max(m-1,0); shch(m); } for(i=len-1;i>=0;i--) ans+=y[i]; cout<<ans;}
错误思路2
统计各个字母的个数,并记录下位置.按字母从小到大输出,并记录最后一位前一个未输出的字母位置,接下来的字母必须在它及其的后面.
超时代码2
#include<bits/stdc++.h>#define ll long long#define N 100005using namespace std;int len,i,j,sl[200],wz[200][10000],tou,pd,k;int main(){ string a; cin>>a; len=a.size(); for(i=0;i<=len-1;i++) { sl[a[i]]++; wz[a[i]][sl[a[i]]]=i; } for(i='a';i<='z';i++) { if(sl[i]>0) { pd=0; for(j=1;j<=sl[i];j++) { if(wz[i][j]>=tou) { pd=1; printf("%c",i); a[wz[i][j]]='0'; } } if(pd==1) { j=wz[i][sl[i]]; while(a[j]=='0'&&j>0) { j--; } tou=j; } } } for(i=len-1;i>=0;i--) { if(a[i]!='0') { printf("%c",a[i]); } }}
正确代码
暂无
T4
题面
题意
输入一棵二叉树,判断其中的数字是否可以查找到.输出不可以找到的数字个数.
代码
暂无.
T5
题面
题意
输入n和长度为n的整数序列a.输入m,接下来m行输入p,k.输出每组数据p大于n所需的操作次数.
操作:p=p+k+a[p].
思路
先算出k小于等于500时的所有情况,大于500的暴力枚举.
代码
#include<bits/stdc++.h>#define ll long long#define N 100005using namespace std;int a[510][N],b[N],m,n,k;int main(){ int i,j,p,q; cin>>n; for(i=1;i<=n;i++) { scanf("%d",&b[i]); } for(i=1;i<=500;i++)//±íʾq { for(j=n;j>=1;j--)//±íʾp { if(i+j+b[j]>n) { a[i][j]=1; } else { a[i][j]=a[i][i+j+b[j]]+1; } } } scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&p,&q); if(q<=500) { printf("%d\n",a[q][p]); } else { k=0; while(p<=n) { k++; p=p+q+b[p]; } printf("%d\n",k); } }}
T6
题面
题意
有n只老鼠,m个洞,输入老鼠位置,洞的位置和它所能容纳的老鼠个数
输出老鼠进洞的最小距离之和
代码
暂无.
阅读全文
0 0
- 16.7.8比赛总结
- 8-15比赛总结
- 8-16 比赛总结
- 8-17比赛总结
- 8-18 比赛总结
- 比赛8 总结
- 2015-8-15比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 本次考试总结(2017.10.8比赛)
- 比赛总结+近期总结
- 比赛总结+近期总结
- 8.8号比赛总结
- 总结小车比赛
- 逆置栈中的内容
- Linux使用中的问题
- git push用法和常见问题分析
- vue.js
- Fragment懒加载 可实现嵌套
- 比赛8 总结
- hdu 2531 #BFS
- SCPS-TP与TCP的区别
- JS正则-银行卡每输入四位自动空格
- java根据isbn编码获取书籍信息(附赠http url的util包)
- iOS开发—纯代码手写(不依靠第三方)实现顶部可滑动标题栏切换控制器
- 深入浅出 消息队列 ActiveMQ
- java编码实现一个字符串中出现最多字母的次数
- 使用wsdl自动生成客户端代码,调用方法时参数错误问题