[7.11] 纪中C组
来源:互联网 发布:java 静态代理 编辑:程序博客网 时间:2024/06/04 22:31
第一题
算个成绩而已嘛,我当时就码了一波快排然后没看数据于是你懂得。。
位数在30位以内
去你[哔——]的!这long long都装不下嘛!
于是一个古老而神秘,呸呸呸,一个久远的算法——高精度从我脑海里浮现……
然而浮现有个[哔——]用,我要打出来而且对才行
恩,唠叨的够多了
其实说白了就一个字符串(数组)快排加上高精减罢了
#include <fstream> #include <string>#include <memory.h>#include <cstdlib>using namespace std;string c[10001],m[10001],e[10001],x,y,z;int n,i,sc[101],p;void qsc(int l,int h){ int i=l,j=h; string mid=c[(l+h)/2],t; if (l>=h) return; do { while (c[i].length()>mid.length()||c[i].length()==mid.length()&&c[i]>mid) i++; while (c[j].length()<mid.length()||c[j].length()==mid.length()&&c[j]<mid) j--; if (i<=j) { t=c[i];c[i]=c[j];c[j]=t; i++;j--; } } while (i<=j); qsc(i,h); qsc(l,j);} void qsm(int l,int h){ int i=l,j=h; string mid=m[(l+h)/2],t; if (l>=h) return; do { while (m[i].length()>mid.length()||m[i].length()==mid.length()&&m[i]>mid) i++; while (m[j].length()<mid.length()||m[j].length()==mid.length()&&m[j]<mid) j--; if (i<=j) { t=m[i];m[i]=m[j];m[j]=t; i++;j--; } } while (i<=j); qsm(i,h); qsm(l,j);}void qse(int l,int h){ int i=l,j=h; string mid=e[(l+h)/2],t; if (l>=h) return; do { while (e[i].length()>mid.length()||e[i].length()==mid.length()&&e[i]>mid) i++; while (e[j].length()<mid.length()||e[j].length()==mid.length()&&e[j]<mid) j--; if (i<=j) { t=e[i];e[i]=e[j];e[j]=t; i++;j--; } } while (i<=j); qse(i,h); qse(l,j);}void g(string s1,string s2){ int i,l,a[101],b[101]; memset(sc,0,sizeof(sc)); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); l=s2.length(); for (i=1;i<=l;i++) b[i]=s2[l-i]-'0'; l=s1.length(); for (i=1;i<=l;i++) a[i]=s1[l-i]-'0'; for (i=1;i<=l;i++) { sc[i]=a[i]-b[i]+sc[i]; if (sc[i]<0) { sc[i+1]=sc[i+1]-1; sc[i]+=10; } } for (i=l;i>=2;i--) if (sc[i]!=0) break; p=i;}int main(){ ifstream fin("score.in",ios::in); ofstream fout("score.out",ios::out); fin>>c[0]>>m[0]>>e[0]; x=c[0];y=m[0];z=e[0]; fin>>n; for (i=1;i<=n;i++) fin>>c[i]>>m[i]>>e[i]; qsc(0,n); qsm(0,n); qse(0,n); g(c[0],x); for (i=p;i>=1;i--) fout<<sc[i]; fout<<' '; g(m[0],y); for (i=p;i>=1;i--) fout<<sc[i]; fout<<' '; g(e[0],z); for (i=p;i>=1;i--) fout<<sc[i]; fout<<' ';}
第三题
1. 每个人的背包能装无限多的物品,每种物品有一个价值,但只能装一件;
2. 每个人都很有个性,所以每个人的背包不会完全相同。
DaA 的团队中有M 个人,那么对于整个团队,背包价值和最大是多少呢?
这道题真的很水很水个屁
很容易看得出来,就是个组合,选最大而已
然而时间复杂度不允许。。。
那我能干吗?
撸……呸,当然是码代码啊
首先DP,f[i]为价值为i时的的方案数
我不想说啦啊啊啊
#include <iostream>#include <cstdio>using namespace std;int m,n;long long s,f[25001],su,a[1000001],i,j;int main(){ freopen("team.in","r",stdin); freopen("team.out","w",stdout); scanf("%d%d",&m,&n); for (i=1;i<=n;i++) { scanf("%d",&a[i]); su+=a[i]; } f[0]=1; for (i=1;i<=n;i++) for (j=su;j>=a[i];j--) f[j]+=f[j-a[i]]; for (i=su;i>=1;i--) if (f[i]>0) { if (f[i]>m) { s+=m*i; m=0; } else if (f[i]<=m) { s+=f[i]*i; m-=f[i]; } if (m==0) break; } printf("%lld",s);}
阅读全文
0 8
- [7.11] 纪中C组
- [7.6]纪中C组
- [7.8] 纪中C组
- [7.7] 纪中C组
- [7.9] 纪中C组
- [7.10] 纪中C组
- 2015年蓝桥杯C组C/C++题目:格子中输出
- c/c++中extern "C"
- C++/C中指针详解
- [c]c中c串和字符串
- C中如何调用C++?C++中如何调用C?
- C中如何调用C++?C++中如何调用C
- c#textBox中换行
- C#中使用HashTable
- C中一些基本概念
- C++中extern “C”
- C中volatile关键字
- c中static用法
- 【函数】register_shutdown_function函数详解【原创】
- python 无法读取文件 找不到文件
- 布局包含inclued标签的注意事项
- Azure 软件架构选择
- iOS MediaPlayer(视频播放器) 笔记
- [7.11] 纪中C组
- 多线程编程10例问题(5)
- E
- MFC中OnMouseWheel不触发的原因之一
- hdu1072 Nightmare
- FPGA基础设计(一):VGA显示方法(文字、图形、波形)的全方面解析
- Linux JDK环境变量配置
- 微信公众号自定义菜单post请求错误解决办法
- hdu1078 FatMouse and Cheese