AcWing 827. 双链表
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<string>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int r[N],l[N],idx;
int e[N];
void init(){
//0是左端点,1是右端点
r[0]=1;
l[1]=0;
idx=2;
}
void add(int k,int x){
e[idx]=x;
r[idx]=r[k];
l[r[k]]=idx;
l[idx]=k;
r[k]=idx;
idx++;
}
void remove(int k){
r[l[k]]=r[k];
l[r[k]]=l[k];
}
int main(){
// L x,表示在链表的最左端插入数 x。
// R x,表示在链表的最右端插入数 x。
// D k,表示将第 k 个插入的数删除。
// IL k x,表示在第 k 个插入的数左侧插入一个数。
// IR k x,表示在第 k 个插入的数右侧插入一个数。
string s;
int x,k;
int m;
cin>>m;
init();
for(int i=0;i<m;i++){
cin>>s;
if(s=="L"){
cin>>x;
add(0,x);
}else if(s=="R"){
cin>>x;
add(l[1],x);
}else if(s=="D"){
cin>>k;
remove(k+1);//因为idx从2开始
}else if(s=="IL"){
cin>>k>>x;
add(l[k+1],x);
}else{
cin>>k>>x;
add(k+1,x);
}
}
for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<" ";
cout<<endl;
}
AcWing 148. 合并果子
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<queue>
#include<vector>
using namespace std;
const int N=1e5+10;
int a[N];
int main(){
int n;
cin>>n;
priority_queue<int,vector<int>,greater<int>> heap;//小根堆
for(int i=1;i<=n;i++){
int x;
cin>>x;
heap.push(x);
}
int res=0;
while(heap.size()>1){
int a=heap.top();heap.pop();
int b=heap.top();heap.pop();
res+=a+b;
heap.push(a+b);
}
cout<<res<<endl;
}
AcWing 913. 排队打水
1.题意:
2.题解:
记得开longlong
3.ac代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int a[N];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
ll res=0,t=0;
for(int i=1;i<=n;i++){
res+=t;
t+=a[i];
}
cout<<res<<endl;
}