标签:for abc fine begin int size out 题解 dijkstra
模拟
模拟
模拟
#include<bits/stdc++.h>
using namespace std;
#define SET0(a) memset(a,0,sizeof(a))
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define DWN(i,a,b) for(int i=(a);i>=(b);i--)
#define INF 0x3f3f3f3f
typedef long long ll;
int main(){
int n,k;
cin>>n>>k;
int tmp=n;
while(k--){
vector<int> v1,v2;
int rec=tmp;
while(rec){
v1.push_back(rec%10);
v2.push_back(rec%10);
rec/=10;
}
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end(),greater<int>());
while(v2.size() && v2.back()==0) v2.pop_back();
int t1=0,t2=0;
while(v1.size()){
t1=10*t1+v1.back();
v1.pop_back();
}
while(v2.size()){
t2=10*t2+v2.back();
v2.pop_back();
}
tmp=t1-t2;
}
cout<<tmp<<endl;
return 0;
}
二分,开int128(毒瘤)
dijkstra板子题,开longlong
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define SET0(a) memset(a,0,sizeof(a))
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define DWN(i,a,b) for(int i=(a);i>=(b);i--)
typedef long long ll;
const ll INF=LLONG_MAX;
typedef pair<ll,ll> PII;
const int N=1e5+5;
ll d[N];
struct node{
ll to,next,w,k;
}e[N<<1];
int head[N],tot;
void add(ll u,ll v,ll w,ll k){e[tot].to=v;e[tot].w=w;e[tot].k=k;e[tot].next=head[u];head[u]=tot++;}
bool vis[N];
int n,m;
int s,t;
ll dijk(){
for(int i=1;i<=n;i++) d[i]=INF;
priority_queue<PII,vector<PII>,greater<PII> > pque;
pque.push({0,s});
d[s]=0;
while(pque.size()){
auto hd=pque.top(); pque.pop();
int ver=hd.second;
if(vis[ver]) continue;
vis[ver]=true;
for(int i=head[ver];~i;i=e[i].next){
int go=e[i].to;
int w=e[i].k-(d[ver]%e[i].k==0?e[i].k:d[ver]%e[i].k)+e[i].w;
if(d[go]>d[ver]+w){
d[go]=d[ver]+w;
pque.push({d[go],go});
}
}
}
if(d[t]==INF) return -1;
else return d[t];
}
int main(){
memset(head,-1,sizeof head);
cin>>n>>m>>s>>t;
while(m--){
ll u,v,w,k;
cin>>u>>v>>w>>k;
add(u,v,w,k);
add(v,u,w,k);
}
cout<<dijk()<<endl;
return 0;
}
标签:for abc fine begin int size out 题解 dijkstra
原文地址:https://www.cnblogs.com/Tenshi/p/14423527.html