洛谷100题计划(10/100)
洛谷100题计划(10/100)
P1031 [NOIP2002 提高组] 均分纸牌 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
因为第\(1\)堆只能移动到第\(2\)堆,且第\(N\)堆只能移动到第\(N-1\)堆,所以直接从左边往右边转移就行,这里是都减了一个平均数,看所有堆都差多少,如果左右两个都没过平均数,可以看成先让右边的给点纸牌让左边达到平均数,然后左边欠的让右边去欠,这个过程右边给了左边一次所以要加上
#include<bits/stdc++.h> using i64 = long long; using namespace std; typedef pair<i64, i64> PII; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<i64> a(N); i64 sum = 0; for(auto &i : a) { cin >> i; sum += i; } sum /= N; for(auto &i : a) i -= sum; int ans = 0; for(int i = 0;i < N - 1;i ++){ if(a[i] != 0){ a[i + 1] += a[i]; ans ++; } } cout << ans << '\n'; return 0; }
P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
以前做过的直接上代码了(
反正\(n\)很小,直接暴搜了,\(m\)就是现在放了几个数,\(sum\)就是现在放了的数的和,\(st\)就是放第几个数(
#include<bits/stdc++.h> using namespace std; int a[20], n, k, ans; int ss(int x) { if (x == 2) return 1; for (int i = 2; i <= sqrt(x); i++) if (x % i == 0) return 0; return 1; } void dfs(int m, int sum, int st) { if (m == k) { if (ss(sum)) ans++; return ; } for (int i = st; i < n; i++) dfs(m + 1, sum + a[i], i + 1); return ; } int main() { cin >> n >> k; for (int i = 0; i < n; i++) cin >> a[i]; dfs(0, 0, 0); cout << ans; return 0; }
P1060 [NOIP2006 普及组] 开心的金明 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
典型的\(01\)背包模版题
#include<bits/stdc++.h> using i64 = long long; using namespace std; typedef pair<i64, i64> PII; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> v(m), p(m); for (int i = 0; i < m; i ++) cin >> v[i] >> p[i]; vector<i64> dp(n + 1, 0); for (int i = 0; i < m; i ++) { for (int j = n; j >= v[i]; j--) { dp[j] = max(dp[j], dp[j - v[i]] + v[i] * p[i]); } } cout << dp[n] << '\n'; return 0; }
P1100 高低位交换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
先把\(n\)的前\(16\)位都取出来然后左移16位就得到了答案的前\(16\)位,然后直接将\(n\)右移\(16\)位就得到后\(16\)位了,最后加起来就行
#include<bits/stdc++.h> using i64 = long long; using namespace std; typedef pair<i64, i64> PII; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n ; i64 p = (n & 65535), q = (n >> 16); p <<= 16; cout << (p + q) << '\n'; return 0; }
P1097 [NOIP2007 提高组] 统计数字 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
就是统计每个数字的出现次数以及排序,可以直接用map,map里的数会自动排序
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int main() { int n,m; cin >> n; map<int,int> mp; for(int i = 0 ;i < n;i ++){ cin >> m; mp[m]++; } for(auto [x,y] : mp) cout << x << ' ' << y << endl; return 0; }
本文作者:Ke_scholar
本文链接:https://www.cnblogs.com/Kescholar/p/17652342.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架