思路: 从高位开始能减成9就先减, 减不了就尽可能地加
范围大用的字符串
#include#include using namespace std; string s; int a, b; int main() { cin >> s >> a >> b; int len = s.size(); for(int i = 0; i < len; i ++){ if(b >= s[i]-'0'+1){ b -= s[i]-'0'+1; s[i] = '9'; }else{ int d = min(a, 9-s[i]+'0'); a -= d; s[i] = s[i]+d; } } cout << s; return 0; }
Dijkstra
我这里把点权加在了边权的末端, 并让到"1"和到"n"的末端点权为0
没用堆优化,不知道会不会tle
#include#include #include #include using namespace std; const int N = 1010; int n, m; int dist[N], g[N][N], wait[N]; bool st[N]; int dijkstra() { memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0; i <= n ; i ++) { int t = -1; for(int j = 1; j <= n; j ++) if(!st[j] && (t==-1 || dist[j]
总结: 一个多月没练, 寄了



