2024牛客寒假训练营1总结

G题不开long long的后果,即使有思路也没用。(给我气的)

 

E题,不看数据范围的后果,不能一题名取题啊。

 

using ll = long long;
void solve() {
	int n, m;
	std::cin >> n >> m;
	std::vector<int>a(n);
	for (int i = 0; i < n; i++) {
		std::cin >> a[i];
	}
	std::vector<int>u(m), v(m);
	for (int i = 0; i < m; i++) {
		std::cin >> u[i] >> v[i];
		u[i]--, v[i]--;
	}
	int ans = n;
	auto dfs = [&](auto self, int i)->void {
		if (i == m) {
			int res = 1;
			for (int j = 0; j < n; j++) {
				res += (a[j] > a[0]);
			}
			ans = std::min(ans, res);
			return;
		}
		for (auto [x, y] : { std::make_pair(3,0),{0,3},{1,1} }) {
			a[u[i]] += x;
			a[v[i]] += y;
			self(self, i + 1);
			a[u[i]] -= x;
			a[v[i]] -= y;
		}
	};
	dfs(dfs, 0);
	std::cout << ans << '\n';
}
int main() {
	std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
	int t;
	std::cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

 jiangly的代码,当中值得学习的是这个dfs,其中这个查找排名这个代码是我没想到的

无序序列中O(n)查找该数的排名。

for (int j = 0; j < n; j++) {
	res += (a[j] > a[0]);
}

看别人代码感觉很简单,自己写就写不出来(*/ω\*) 。

C题也是……ε=(´ο`*)))唉,o(╥﹏╥)o,鉴定为语文能力不好

Sc-Smin<=M,Sc=a1+……ak+……an+(n-k+1)*tc,Smin=a1+……ak+……an,两个一减不就是,p*tc=M吗,把tc除过去,如果p超过了n那就取n嘛,不然就取p嘛。真的服了自己这个脑子怎么就没想到这样写。稍微推导一下就出来了,虽然但是,这个读题能力怎么提升啊……

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int n, Q, tc;
    std::cin >> n >> Q >> tc;
    
    std::vector<int> t(n);
    std::vector<i64> s(n + 1);
    for (int i = 0; i < n; i++) {
        std::cin >> t[i];
    }
    std::sort(t.begin(), t.end());
    for (int i = 0; i < n; i++) {
        s[i + 1] = s[i] + t[i];
    }
    
    while (Q--) {
        i64 M;
        std::cin >> M;
        
        i64 c = std::min(1LL * n, M / tc);
        i64 ans = s[n - c] + tc;
        std::cout << ans << "\n";
    }
    
    return 0;
}

剩下的明天再更吧。不,睡醒了在更。

-----------------------------------------------------2024/2/3/1:10----------------------------------------------------------

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值