2018“百度之星”程序设计大赛-初赛(a)(代码片段)

whdsunny whdsunny     2022-12-21     484

关键词:

第二题还算手稳+手快?最后勉强挤进前五百(期间看着自己从两百多掉到494名)

1001  度度熊拼三角    (hdoj 6374)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6374

签到题 

题意:给n根木棒 求可以拼出的周长最长的三角形

可以用贪心的思想做 对所有的木棒长度进行排序 取最长的三根进行判断是否可以组成三角形 若不能 舍去最长的一根 每次都选择相邻的三根 for一遍就好

复杂度为O(nlogn)

代码如下

技术分享图片
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn=1010;
int n,ans;
int a[maxn];

int cmp(int a,int b)
    return a>b;


int check(int x)
    if(a[x]+a[x+1]>a[x+2]&&a[x]+a[x+2]>a[x+1]&&a[x+2]+a[x+1]>a[x]) return 0;
    else return 1;


int main()
    while(scanf("%d",&n)!=EOF)
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        
        sort(a,a+n,cmp);
        int flag=0;
        for(int i=0;i<n;i++)
            if(check(i)==0) ans=a[i]+a[i+1]+a[i+2];flag=1;break;
        
        if(flag==1) printf("%d
",ans);
        else printf("-1
");
    
    return 0;
View Code

 

1002 度度熊学队列      (hdoj 6375)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6375

因为是用stl里的list做的 对我来说也算是个签到题了 几乎就算是个list的板子题了

题意:rt 讲的非常清楚

没想到居然没有卡 stl  从此有了stl的真香警告(突然开始打算好好学stl了)

代码如下

技术分享图片
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <list>

using namespace std;
const int maxn=150010;
list<int>lst[maxn];
int n,q,op,u,v,w,val;

void read(int &x)
    char ch = getchar();x = 0;
    for (; ch < 0 || ch > 9; ch = getchar());
    for (; ch >=0 && ch <= 9; ch = getchar()) x = x * 10 + ch - 0;


int main()
    while(scanf("%d%d",&n,&q)!=EOF)
        for(int i=1;i<=n;i++) lst[i].clear();
        while(q--)
            read(op);
            if(op==1)
                read(u);read(w);read(val);
                if(w==0) lst[u].push_front(val);
                if(w==1) lst[u].push_back(val);
            
            
            if(op==2)
                read(u);read(w);
                if(lst[u].empty()) printf("-1
");
                else
                    if(w==0) printf("%d
",lst[u].front());lst[u].pop_front();
                    if(w==1) printf("%d
",lst[u].back());lst[u].pop_back();
                
            

            if(op==3)
                read(u);read(v);read(w);
                if(w==0) lst[u].splice(lst[u].end(),lst[v]);
                if(w==1)
                    lst[v].reverse();
                    lst[u].splice(lst[u].end(),lst[v]);
                
            
        
    
    return 0;
View Code

 

1003 度度熊剪纸条  (hdoj 6376)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6376

比赛的时候没有肝出来……orz

题意:给一个长度为n的序列 全部由0 1组成  可以切k刀 切完后的k+1段可以自由拼接(不可翻转)求最终序列中的前缀1的数量

应该要分四种情况 先上男朋友的代码

代码如下

技术分享图片
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
const int maxn=1e5+50;
int n,k,cnt,cnt1,ans;
int b[4];
char s[maxn];

struct node

    int d,w;
kk[maxn];

int cmp(node a,node b)
    if(a.d==b.d) return a.w<b.w;
    else return a.d>b.d; 


void work(int k,int tmp)
    for(int i=1;i<=cnt;i++)
        if(k>=kk[i].w)
            tmp+=kk[i].d;
            k-=kk[i].w;
        
    
    ans=max(ans,tmp);


int main()
    while(scanf("%d%d",&n,&k)!=EOF)
        scanf("%s",s+1);
        if(k==0)
            ans=0;
            for(int i=1;i<=n;i++)
                if(s[i]==1) ans++;
                else break;
            
            printf("%d
",ans);
            continue;
        
        int num=0;
        cnt=cnt1=0;
        for(int i=1;i<=n;i++)
            if(s[i]==1)
                num++;
                if(i==n) b[++cnt1]=num;
            
            else if(num!=0)
                if(i-1==num) b[++cnt1]=num;
                else kk[++cnt].d=num;kk[cnt].w=2;
                num=0;
            
        
        k++;
        ans=0;
        sort(kk+1,kk+1+cnt,cmp);
        if(cnt1==2)
            work(k,0);
            work(k-1,b[1]);
            work(k-1,b[2]);
            work(k-2,b[1]+b[2]);
        
        else if(cnt1==1)
            work(k,0);
            work(k-1,b[1]);
        
        else work(k,0);
        printf("%d
",ans);
    
    return 0;
View Code

 

2018“百度之星”程序设计大赛-初赛(a)度度熊学队列listrope(代码片段)

c++list使用1#include<cstdio>2#include<cstdlib>3#include<cmath>4#include<cstring>5#include<time.h>6#include<string>7#include<set>8#include<map>9#include< 查看详情

2018“百度之星”程序设计大赛-初赛(b)(代码片段)

degree  Accepts:1581  Submissions:3494 TimeLimit:2000/1000MS(Java/Others)  MemoryLimit:131072/131072K(Java/Others)ProblemDescription度度熊最近似乎在研究图论。给定一个有 NN 个 查看详情

2018“百度之星”程序设计大赛-初赛(b)(代码片段)

rank264,三题水过~hdu6380_degree#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmaxn=200005;intin[maxn];intn,m,k;intmain()intt;scanf("%d",&t);while(t--)memset(in,0,sizeof(in) 查看详情

2017"百度之星"程序设计大赛-初赛(a)

2017"百度之星"程序设计大赛-初赛(A)hdu6108   求出n-1的因子个数即可#include<bits/stdc++.h>usingnamespacestd;#pragmacomment(linker,"/STACK:102400000,102400000")#definerep(i,a,b)for(inti=a;i<=b;++i)#de 查看详情

2020百度之星程序设计大赛初赛二(代码片段)

A.Poker(Hdu????)题目大意给定n个币,每次投至少m个,当投(x)个时,给回(lfloorx imes(1-p\%)floor)。问你最多能投多少次。解题思路很显然每次投(m)元是最优的,因为但凡投(m+1)元,给回的钱数不可能会增加二,要不不变要不减少。每次... 查看详情

2018“百度之星”程序设计大赛-初赛(a)1004/hdu6377度度熊看球赛dp递推

度度熊看球赛ProblemDescription世界杯正如火如荼地开展!度度熊来到了一家酒吧。有N对情侣相约一起看世界杯,荧幕前正好有2×N个横排的位置。所有人都会随机坐在某个位置上。当然,如果某一对情侣正好挨着坐,他们就会有说... 查看详情

2021年百度之星·程序设计大赛-初赛二1001签到(找规律,快速幂)(代码片段)

problem签到Accepts:6141Submissions:13643TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)ProblemDescription给a,ba,b,每次a,ba,b会变为a+b,a-ba+b,a−b,问kk次之后变成了哪两个数 查看详情

2021年百度之星·程序设计大赛-初赛二1002随机题意(区间贪心)(代码片段)

problem随机题意Accepts:1411Submissions:3641TimeLimit:2000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)ProblemDescription给一个整数数组a_1,a_2,\\cdots,a_na1​,a2​,⋯,an​和kk,你想要找到一个最大的值xx,使 查看详情

2021年百度之星·程序设计大赛-初赛二1004净化(模拟)(代码片段)

problemsolution//1004#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constLLmod=998244353;constintmaxn=1e5+10;LLa[maxn];intmain() ios::sync_with_stdio(0),cin.tie( 查看详情

2017"百度之星"程序设计大赛-初赛(a)01,05,06

 小C的倍数问题   TimeLimit:2000/1000MS(Java/Others)  MemoryLimit:32768/32768K(Java/Others)ProblemDescription根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数。反之,如果一个数每一... 查看详情

2017"百度之星"程序设计大赛-初赛(a)

小C的倍数问题ProblemDescription根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数。反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数。现在给定进制P,求有多少个B满足P... 查看详情

hdu6109数据分割并查集(2017"百度之星"程序设计大赛-初赛(a))

  数据分割TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1119    AcceptedSubmission(s):268ProblemDescriptio 查看详情

hdu6122今夕何夕数学公式(2017"百度之星"程序设计大赛-初赛(a))

今夕何夕TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1295    AcceptedSubmission(s):455ProblemDescription今天是2017年8月6 查看详情

2017"百度之星"程序设计大赛-初赛(a)数据分割

n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行。相等关系具有传递性,并查集维护;不等关系根据相等关系进行合并,采用平衡树的启发式合并。每次... 查看详情

hdu6113度度熊的01世界dfs(2017"百度之星"程序设计大赛-初赛(a))

 度度熊的01世界TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1117    AcceptedSubmission(s):400ProblemDescription度 查看详情

hdu6108小c的倍数问题数学(2017"百度之星"程序设计大赛-初赛(a))

小C的倍数问题TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):481    AcceptedSubmission(s):278ProblemDescription根据小学数学的知识 查看详情

2021年百度之星·程序设计大赛-初赛二1005水题(贪心结论)(代码片段)

problemsolution开始还以为是CF987E,但是奇偶性并不一样,,结果是个贪心乱搞。。样例都没过交了能过,醉了。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;intmain() ios::sync_with_stdio(0),ci 查看详情

2022百度之星程序设计大赛-初赛-第二场1001和(代码片段)

problemsolution题意:给出长为n的序列,q次询问区间是否存在<=k个数之和>=x。n,q<1e5,k<10.思路:因为要和>=x,所以让和尽可能大,即判断区间中最大的k个数之和是否大于x即可。即区间最... 查看详情