[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);}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 酷派手机玩游戏竖屏怎么办 身上起红疙瘩很痒怎么办越挠越多 苹果6s指纹解锁坏了怎么办 案子结了网上追逃的怎么办 贷款买的手机不还了会怎么办 支付宝手机号没用了登陆不了怎么办 支付宝绑定的手机号注销了怎么办 考勤机进水了不能识别指纹怎么办? 网商银行人脸识别失败怎么办 电脑网页上的字变小了怎么办 把光驱换成固态硬盘后不识别怎么办 相机内存卡电脑读不出来怎么办 sd卡在电脑上无法格式化怎么办 内存卡突然读不出来了怎么办 怀孕两个月胎儿死在腹中怎么办 香港公司在大陆卖地皮资金怎么办 结婚证上的身份证号码错了怎么办 身份证快过期了人在外地怎么办 邮政电话银行登录密码忘记了怎么办 如果欠了3w不敢和家里说怎么办 大四学生欠了3w该怎么办 房子付了首付贷款贷不下来怎么办 浙江嵊泗人在金华丢了身份证怎么办 一证5号够了怎么办新卡 微信号被盗实名认证是自己的怎么办 苹果微信登录显示被盗风险怎么办 在诈骗公司上班被公安抓了怎么办 在国外护照不小心撕坏了怎么办 在俄罗斯护照超期拉黑应该怎么办 俄罗斯五年定居护照丢了怎么办 百家号文章质量分一直在下降怎么办 如果在韩国把护照弄丢了怎么办 坐亲戚的车出了车祸受伤怎么办 出了车祸受伤对方不拿医药费怎么办 如果找你买保险的不在了保单怎么办 赴美生子父母一方是绿卡怎么办 农保报销需要居住证过期了怎么办 有上海户口但没有户口本怎么办护照 签证用的旧护照丢失了英签怎么办 买的动迁房房东不肯过户怎么办 身份信息在qq邮箱泄露了怎么办