震驚!!!某初中生竟30min一藍兩紫一黑!!!


我才不會說我是標題黨

題目地址

種樹種樹2 數據備份 黑題???自己找吧

Solution

都是一個東西啦,其實思路差不多,注意幾個點

  • 注意數據類型
  • 注意數據范圍
  • 注意輸入格式
  • 多測不清空,爆零兩行淚
  • 題目要求(最大,最小)
  • 正負

接下來就是愉快的代碼時間

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll d[500005],ans;
 5 bool vis[500005];
 6 int n,k,t,t1;
 7 int r[500005],l[500005];
 8 struct node{ 
 9     int id;
10     ll val;
11     node(ll Val,int Id){val=Val,id=Id;}
12     bool operator < (node a) const {
13         return val<a.val; 
14     }
15 };
16 void del(int x){
17     l[x]=l[l[x]];
18     r[x]=r[r[x]];
19     r[l[x]]=l[r[x]]=x;
20 }
21 priority_queue<node> q;
22 int main(){
23     scanf("%d%d",&n,&k);
24     for(int i=1;i<=n;i++)scanf("%lld",&d[i]),l[i]=i-1,r[i]=i+1,q.push(node(d[i],i));
25     for(int i=1;i<=k;i++){
26         while(vis[q.top().id])
27          q.pop();
28         node tmp=q.top();q.pop();
29         if(tmp.val<0)break;
30         ans+=tmp.val;
31         vis[l[tmp.id]]=vis[r[tmp.id]]=1;
32         d[tmp.id]=d[l[tmp.id]]+d[r[tmp.id]]-d[tmp.id];
33         q.push(node(d[tmp.id],tmp.id));
34         del(tmp.id);
35     }
36     printf("%lld\n",ans);
37 } 
種樹
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll d[100005],ans;
bool vis[100005];
int n,k,t,t1;
int r[100005],l[100005];
struct node{
    ll val;
    int id;
    node(ll Val,int Id){val=Val,id=Id;}
    bool operator < (node a) const {
        return val>a.val; 
    }
};
void del(int x){
    l[x]=l[l[x]];
    r[x]=r[r[x]];
    r[l[x]]=l[r[x]]=x;
}
priority_queue<node> q;
int main(){
    //freopen("a.in","r",stdin);
    int T;
    scanf("%d",&T); 
    while(T--){
        ans=0;
        scanf("%d %d %d",&n,&k,&t);
        fill(vis+1,vis+n+1,0);
        for(int i=1;i<n;i++)scanf("%d",&t1),d[i]=t1-t,t=t1;
        d[0]=d[n]=2e9;
        for(int i=1;i<n;i++)l[i]=i-1,r[i]=i+1,q.push(node(d[i],i));
        for(int i=1;i<=k;i++){
           while(vis[q.top().id])
            q.pop();
           node tmp=q.top();q.pop();
           ans+=tmp.val;
           vis[l[tmp.id]]=vis[r[tmp.id]]=1;
           d[tmp.id]=d[l[tmp.id]]+d[r[tmp.id]]-d[tmp.id];
           q.push(node(d[tmp.id],tmp.id));
           del(tmp.id);
        }
        while(!q.empty())q.pop();
        printf("%lld\n",ans);
    }
} 
數據備份

祝大家早日A了這道題(滑稽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM