首页 > 其他分享 >2022杭电多校第2~10场集(赛后补题)

2022杭电多校第2~10场集(赛后补题)

时间:2022-08-21 18:15:19浏览次数:101  
标签:杭电多校 ch 10 int 31 long 补题 365 dp

打完十场回顾一下之前一些的题 都是简单题 难的我不会

继续努力  

Luxury cruise ship

纯签到 完全背包。数据有点大。三个物品价值是互质的,我们把7,31,365乘起来,用n%(7*31*365),计算dp[n]+n/(7*31*365)*31*365即可

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 365 * 31 * 7+1;

int dp[N], w[4] = { 0,7,31,365 };
int n;


signed main() {
    ios::sync_with_stdio(false);

    fill(dp, dp + 365 * 31 * 7+1, 0x3f3f3f3f);
    dp[0] = 0;
    for (int i = 1; i <= 3; i++) 
    {
        for (int j = w[i]; j <= N; j++) 
            dp[j] = min(dp[j], dp[j - w[i]] + 1);
    }
    int t;
    cin >> t;
    while (t--) 
    {
        cin >> n;
        int t = n % (365 * 31 * 7);
        if (dp[t] == 0x3f3f3f3f)
            cout << -1 << endl;
        else
            cout << dp[t] + n / (365 * 31 * 7) * 31 * 7 << endl;
    }
}

 

Package Delivery

易知 贪心 堆优化

小于等于k个,那我们直接全部取出即可。大于k个,那么我们取出最紧急的k个。

#include<bits/stdc++.h>
using namespace std;

const int N=400010;
typedef pair<int,int> PII;

int l[N],r[N];
struct node{
    int l,r;
}p[N];

bool cmp(node a,node b)
{
    return a.l<b.l;
}

void solve()
{
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&p[i].l,&p[i].r);
    sort(p+1,p+n+1,cmp);
    priority_queue<PII,vector<PII>,greater<PII> >q;
    while(!q.empty()) q.pop();
    q.push({p[1].r,p[1].l});
    int t=p[1].r,ans=0;
    for(int i=2;i<=n;)
    {
        while(i<=n&&(p[i].l<=t||t==-1))
        {
            if(t==-1) t=p[i].r;
            t=min(t,p[i].r);
            q.push({p[i].r,p[i].l});
            i++;
        }
        if(!q.empty())
        {
            ans++;
            if(q.size()<=k){
                while(!q.empty())    
                    q.pop();
                t=-1;
            }
            else{
                int tt=k;
                while(tt--)      
                    q.pop();
                t=q.top().first;
            }
        }
    }
    ans+=(q.size()+k-1)/k;
    printf("%d\n",ans);    
}

signed main()
{
    int _;
    cin>>_;
    while(_--) {
        solve();
    }
}

 

Climb Stairs 

这个题数据其实比较水(非常水)  官方题解是线段树 其实以这个题的数据之弱  直接暴力枚举加一个前缀和判断来剪枝就能过  全场都过直接做成签到题~

容易看出贪心做法  就是往回跳的过程的判断 不能暴力枚举 线段树来维护优化能做(O(nlogn))   用dp的思想也能维护出 而且更快(O(n))   暴力加简单的剪枝也能过.......

随便搞的暴力+剪枝code(再吐槽一下数据真的拉):

#include<bits/stdc++.h>
#define int long long
using namespace std;


int read(int &n){
    char ch=' '; int q=0,w=1;
    for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';ch=getchar())q=q*10+ch-48;
    n=q*w; return n;
}

const int N=1e5+10;
int n,k,a[N];
int f[N]; 

void sovle()
{
    read(n); read(a[0]); read(k); 
        
        f[0]=a[0]; 
        for(int i=1;i<=n;i++){
            read(a[i]);
            f[i]=f[i-1]+a[i];
        }
        
        int F=1; 
        
        int sum=a[0];
        for(int i=1;i<=n;i++){ 
        
            
            if(sum>=a[i]){ 
                sum+=a[i];
            } 
            else{ 
                int F2=0;
                int len1=-1;
                    
                if(k>=n-i+1){ 
                    k=n-i+1;
                }
                    
                for(int j=2;j<=k;j++){ 
                    int cnt=sum;
                    if(cnt+f[i+j-1]-f[i] < a[i]){ 
                        continue; 
                    }
                    
                    F2=1; 
                    len1=j; 
                    
                    for(int k0=i+j-1;k0>=i;k0--){
                        if(cnt>=a[k0]){
                            cnt+=a[k0];
                        }
                        else{ 
                            F2=0;
                            break;
                        }
                    }
                    if(F2)break;
                } 
                
                if(F2){
                    sum += f[i+len1-1]-f[i-1]; 
                    i += len1-1; 
                } 
                else{
                    F=0;
                    break;
                }
            }
        }
        
        if(F)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
}

signed main(){ 
    int t; 
    read(t); 
    while(t--){
        sovle();
    }
}

 

(努力更新中 这几天能写的会全部补完)

除了一些不想补的 和对我来说太难的

 

标签:杭电多校,ch,10,int,31,long,补题,365,dp
From: https://www.cnblogs.com/0521pan/p/16507949.html

相关文章

  • Common English speaking 1000 sentences(1-100)-01
    commonspokenenglishonethousandphrases.==>CommonEnglishspeaking1000sentencesIsee.Iquit!Letgo!Metoo.Mygod!Noway!Comeon.Holdon.Iagree......
  • 10--DSL查询文档-查询分类和基本语法
    elasticsearch的查询依然是基于JSON风格的DSL来实现的。 DSL查询分类Elasticsearch提供了基于JSON的DSL(DomainSpecificLanguage)来定义查询。常见的查询类型包括:(1)......
  • 使用线程池,并发计算1~50、51~100的和,再进⾏汇总统计。
    知识点:获取线程池、提交任务、获取返回值 获取线程池的几种方式:newFixedThreadPool(intnThreads)获取固定数量的线程池。参数:指定线程池中线程的数量。(使用这种)newC......
  • 2022杭电多校第十场7、3、9、4
    1007EvenTreeSplit先考虑最简单的情况,如下图的边\((3,4)\),我们把这条边切掉,最后会留下一部分的点数为2,另一部分的点数依然是偶数。进一步思考可以知道,对于边\((u,v)\)......
  • cf1003 E. Tree Constructing
    题意:构造一棵树,要求节点数为\(n\),直径为\(d\),每个点的度不超过\(k\)思路:先构造一条\(d+1\)个节点、\(d\)条边的链。然后在链上加分支。记链上节点的编号为\(1,2......
  • 性能测试-压测工具ab-1024个并发以下可用以及ab和wrk的优缺点
    ab全称:ApacheBench,用于web性能压力测试,ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。ab命令对发出负载的计算机要求很低,不会占用很高CPU......
  • 剑指 Offer 10- I. 斐波那契数列
    一、题目写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。斐波那契数列的定义如下:F(0)=0,  F(1) =1F(N)=F(N-1)+F(N-2),其中N>1.斐......
  • ceph 010 clustermap ceph调优
    clustermap[ceph:root@clienta/]#cephmondumpepoch4fsid2ae6d05a-229a-11ec-925e-52540000fa0clast_changed2021-10-01T09:33:53.880442+0000created2021......
  • Visual AssistX (x64) Version 10.9.2458 Cracked
    说明1.只支持VisualAssistXx64的2458版本2.只支持VisualStudio2022版本3.出现错误提示说明安装的Vax版本不对。声明敬请各位大爷:如果之前使用过其他破解版......
  • Day10-CSS
    图片整合,精灵图,雪碧图:什么是图片整合: 1.把小的图片整合到一个大的图片上为什么要图片整合: 优点: 较少对服务器的请求次数 减少图片的内存 增加页面的加载速度 ......