签到题 + 以为深度模拟但实际上是函数求最值题
技巧:
能用乘法就不用除法表示
1.进制
2.三元组 ->注意到其中一个数可以枚举
3.贡献的作用
没做出来的rz题
1.让n尽量变少 有两种操作 减一个数 让一个数/2
错因:用了dfs
正确解法:
while(n>0){
n=min(n/2,n-x);
res++;
}
2.区间分类讨论 操作一:所有数膜上一个数 操作二:所有数减去一个数
错因:误以为是线段树 在小白赛第三题。。。
正解:
分类讨论
1.所有数都是0 操作数就是0
2.所有数都是1 操作数就是1
3.所有数的最大公约数不是1 说明是某个数的倍数 一模最大公约数 全变成0
4.所有数的最大公约数是1 说明互质 那就对2取模 然后减去1
5.
3.计算贡献https://ac.nowcoder.com/acm/contest/11227/D
计算所有方案的快乐值
[x x x _ _ _ _]这叫一个方案 发现当3个确定下来后 对总的答案 还有 2^(n-3)个 所以最后是
(每一天的贡献值*(2^(n-3)) ) 求和
作者:鸡尾酒QAQ
链接:https://ac.nowcoder.com/discuss/956950?type=101&order=0&pos=2&page=0&channel=-1&source_id=1
来源:牛客网
for(int i = 1; i <= n; i++){
ll now = 0;
if(i * 2 <= n){
now += a[i] ^ a[i*2];
}
if(i * 2 + 1 <= n){
now += a[i] ^ a[i*2+1];
now += a[i] ^ a[i*2+1] ^ a[i*2];
now += a[i*2] ^ a[i*2+1];
ans += now * mi[n-3];
}else{
ans += now * mi[n-2];
}
ans %= mod;
}
4.分类讨论 安排时间类型 要么自己完成 要么等别人完成自己再完成半成品https://ac.nowcoder.com/acm/contest/11227/E
1.所有工艺品全部自己做
2.自己制作工艺品的速度比加工半成品的速度慢,此时应当优先满足加工半成品的需求,所以得计算最多能够加工多少半成品(由制作速度较慢的人来决定),然后剩余时间全部自己制作工艺品 。
即 c<a&&b<=c 那么a首先做一次 之后b做好多件c也能做完了
即 c<a&&b<=c 那么a首先做一次 之后c做好多件b才能做完一件 这样会浪费时间 变成最后一个c放到最后 做b的时间是n-c
//类似n-b就是可以用来做c时间 就是c往后放 前面多出的时间用来做一个a
//浪费时间
if(a < c){
cout << n / a;
}else{
int now = min((n - c) / b, (n - b) / c); // 表示制作 now 件半成品,数量由较慢的人来决定
cout << now + (n - now * c) / a; // 制作 now 件半成品,前面的时=时间自己加工
}
5.数位dp弱化版 求1-n鸡尾酒数字
结论: 123_ 对n位数 前n-1个数字确定下来后 有且只有一个数子填在末尾 让他们的总和等于某个值如本题的10
所以本题的重点维护dn 前n-1位的数位总和
注意可能多家了个1
6.凑炉石的完全刚好击杀问题 分类讨论https://ac.nowcoder.com/acm/contest/34442/C
每次都能减一滴血 但每7次会全体造成伤害 问能否最后一次同时击杀
如果总数不是(n+6)的倍数(n每7次减血 这里是看能不能刚好消灭)
如果最小值顶不住 总数的每7次减血也会失败
if(sum % (n + 6) != 0 || Min < sum / (n + 6)){
cout<<"NO\n";
}else{
cout<<"YES\n";
}
牛客挑战赛b 货物搬运的价值问题 设x#
我们假设从A地向C地运输x吨货物,那么A向D运输A-x吨,B向C运输C-x吨,B向D运输B-(C-x)吨。记A->C的花费为ac,B->C的花费为bc,A->D的花费为ad,B->D的花费为bd。由此我们可以得到关于cost的一次函数:
y = (ac-ad+bd-bc)x + bcC+adA+bdB-bd*C
可以看出y只和x的取值有关,我们可以分类讨论一下x的系数:
当(ac-ad+bd-bc) >= 0时,我们希望x越小越好,即A向C运输的量越小越好,那么B向C运输的量越大越好。
如果B>=C,那么我们直接将B全部运给C直至C满足要求,此时A向C运输0吨;如果B<C那么我们需要从A补充C-B吨:
即 x = 0 (B >= C), x = C - B (B < C)
当(ac-ad+bd-bc) < 0时,我们希望x越大越好,即A向C运输的量越大越好。
如果A>=C,那么我们直接将A全部运给C直至C满足要求,此时A向C运输C吨;如果A<C那么我们将可用的A全部运给C:
即 x = C (A >= C), x = A (A < C)
int A, B, C, D;
cin >> A >> B >> C >> D;
int ac, ad, bc, bd;
cin >> ac >> ad >> bc >> bd;
if((ac-ad+bd-bc) >= 0) {
if(B>=C) {
cout << (ac-ad+bd-bc)*0+bc*C+ad*A+bd*B-bd*C << endl;
}else {
cout << (ac-ad+bd-bc)*(C-B)+bc*C+ad*A+bd*B-bd*C << endl;
}
}else {
if(A >= C) {
cout << (ac-ad+bd-bc)*C+bc*C+ad*A+bd*B-bd*C << endl;
}else {
cout << (ac-ad+bd-bc)*A+bc*C+ad*A+bd*B-bd*C << endl;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库