题解 | #躲避技能#

躲避技能

https://ac.nowcoder.com/acm/contest/40646/A

差不多的想法,但是用的 topo 实现,把出发点标成 1,目标点标成 -1,然后topo网上搞就行,每条边经过的时候加上这条边的边权乘上当前点的值的绝对值。

保龄了,原因是:

		char s[105];
		scanf ("%s", s);
		len = 0; reverse (s, s + strlen (s));

高精度里面的的这个,考场上写成了

		char s[105];
		scanf ("%s", s);
		len = 0; reverse (s, s + len);

看到翻转但完全没用/ll/ll/ll

代码

# include <bits/stdc++.h>
# define wheneveright signed main
using namespace std;

const int maxn = 300005;
const int maxe = 600009;

const int TT = 10000;
struct INT {
	int len, a[35];
	INT () { len = 0; memset (a, 0, sizeof (a)); }
	void get () {
		char s[105];
		scanf ("%s", s);
		len = 0; reverse (s, s + strlen (s));
		memset(a, 0, sizeof(a));
		int L = strlen (s);
		len = (L + 3) / 4;
		int yu = L % 4 ? L % 4 : 4, cnt = len;
		for (int i = 0; i < yu; i++)a[len] = a[len] * 10 + s[i] - '0';
		for (int i = yu; s[i]; i += 4) {
			int ret = 0;
			for (int j = i; j <= i + 3; j++)ret = ret * 10 + s[j] - '0';
			a[--cnt] = ret;
		}
		return ;
	}
	INT operator + (const INT b) {
		INT c;
		c.len = max(len, b.len);
		for (int i = 1; i <= c.len; i++) {
			c.a[i] += a[i] + b.a[i];
			c.a[i + 1] = c.a[i] / TT;
			c.a[i] %= TT;
		}
		if (c.a[c.len + 1])c.len++;
		return c;
	}
	INT operator * (const INT b) {
		INT c;
		c.len = len + b.len - 1;
		for (int i = 1; i <= len; i++)
			for (int j = 1; j <= b.len; j++) {
				c.a[i + j - 1] += a[i] * b.a[j];
				c.a[i + j] += c.a[i + j - 1] / TT;
				c.a[i + j - 1] %= TT;
			}
		if (c.a[c.len + 1]) c.len++;
		while (c.len > 1 && !c.a[c.len]) c.len--;
		return c;
	}
	void print () {
		printf ("%d", a[len]);
		for (int i = len - 1; i >= 1; i--) printf ("%04d", a[i]);
		printf ("\n");
	}
} vl[maxn], res;

# define int long long

INT change (int x) {
	INT ret; ret.len = 0; memset (ret.a, 0, sizeof ret.a);
	while (x) {
		ret.a[++ret.len] = x % TT;
		x /= TT;
	}
	return ret;
}

struct reader {
	template <typename Type>
	reader & operator >> (Type & ret) {
		int f = 1; ret = 0; char ch = getchar ();
		for (;!isdigit (ch); ch = getchar ()) if (ch == '-') f = -f;
		for (; isdigit (ch); ch = getchar ()) ret = (ret * 10) + ch - '0';
		ret *= f; return * this;
	}
} fin;

int n, m, x, y, z, cnt[maxn];
int lnk[maxn], nxt[maxe], son[maxe], val[maxe], deg[maxn], tot;
void add_e (int x, int y, int z) {
	nxt[++tot] = lnk[x]; lnk[x] = tot; son[tot] = y; val[tot] = z; deg[x]++;
	nxt[++tot] = lnk[y]; lnk[y] = tot; son[tot] = x; val[tot] = z; deg[y]++;
	return ;
}

int a[maxn]; bool vis[maxn];

queue < int > que;
void topo () {
	while (!que.empty ()) que.pop ();
	for (int i = 1; i <= n; i++) if (!--deg[i]) que.push (i);
	while (!que.empty ()) {
		int now = que.front (); que.pop (); vis[now] = true;
		for (int j = lnk[now]; j; j = nxt[j]) {
			if (!vis[son[j]]) cnt[val[j]] += abs (a[now]), a[son[j]] += a[now];
			if (!--deg[son[j]]) que.push (son[j]);
		}
	}
	return ;
}

wheneveright () {
	fin >> n >> m;
	for (int i = 1; i <= m; i++) fin >> x, a[x]++;
	for (int i = 1; i <= m; i++) fin >> x, a[x]--;
	for (int i = 1; i < n; i++) {
		fin >> x >> y; vl[i].get ();
		add_e (x, y, i);
	}
	topo ();
	for (int i = 1; i < n; i++) res = res + (vl[i] * change (cnt[i]));
	res.print ();
	return 0;
}
全部评论

相关推荐

已经入职字节快一个月了,突然想起来之前那段时间的面经没有发,先发一下timeline吧。Tiktok&nbsp;内容安全平台(人才库电话捞我):电话10.28&nbsp;-&gt;&nbsp;一面10.30(我觉得你跟我们组业务挺match的,然后过了三天问hr挂了,应该是别人流程更快)阿里淘天:投递11.11-&gt;约面11.12-&gt;一面11.14(问得很简单,30分钟,手撕八股全过无后续)Kpi面腾讯wxg&nbsp;微信小程序:投递11.13&nbsp;-&gt;约面11.14-&gt;&nbsp;一面11.17&nbsp;(究极无敌拷打,问我多模态大模型涉及的算法?但是人很好)-&gt;11.19流程终止小红书&nbsp;风控平台:投递11.16&nbsp;—约面11.17&nbsp;&nbsp;-&gt;一面11.18&nbsp;(抽象的面试官,面试感觉一般,问得前端网页安全相关的,确实没准备)-&gt;11.20挂百度&nbsp;百家号:投递11.14&nbsp;—&gt;约面11.14&nbsp;-&gt;一面11.14(当场约2面)-&gt;二面11.24-&gt;口头告知offer,&nbsp;拒绝(原因是业务不太好)美团&nbsp;技术平台投递11.17&nbsp;-&gt;&nbsp;约面(忘记了,没多久)&nbsp;-&gt;一面11.19&nbsp;-&gt;二面11.21&nbsp;(字节offer不想面了)快手&nbsp;电商业务投递11.17&nbsp;-&gt;&nbsp;约面11.18&nbsp;-&gt;一面11.19&nbsp;-&gt;&nbsp;二面11.21(拒了)腾讯wxg&nbsp;微信支付(被捞):(直接发面试邮件)技术一面12.05&nbsp;-&gt;技术二面12.11&nbsp;-&gt;技术三面12.17&nbsp;-&gt;&nbsp;hr面已拒绝(了解业务后拒绝,但是有转正hc,感觉还蛮可惜)字节跳动&nbsp;xxxx:东家就不放具体的时间线了,大概是面完第二天就能知道结果,除了有几天ld请假了没填面评。不去wxg还有个原因是还在期末周,深圳学校来回太麻烦了,至少现在在的组感觉能学到很多的东西,自己的选择应该也没错。还是感概一下,一年前大二的时候投简历海投基本上石沉大海,无论大小厂约面比例很少。现在基本上投了就有面试,还都是以前梦寐以求的大厂,现在自己也有了更多的选择,也没有投太多简历。也感谢上一段实习的经历,很有意思的项目,无论是字节,腾讯,还是美团基本都有聊这个项目。面经需要等一下,也许等周末有空了再发给各位uu,感兴趣可以关注一下~有想要交流学习的同学也可以私信我,目前人在北京大钟寺~,可以找搭子~
正能量的牛可乐:这么多大厂面试下来,不仅摸清了不同公司的面试风格,还能精准避雷业务不匹配的岗位,血赚
实习简历求拷打
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务