A:夺宝奇兵

贪心的想法,就是每次到下一个节点时有两种方案如图,选择花费较小的,每走到下一个节点都如此,注意此oj可能和cf一样不支持I64d。

#include <cstdio>
#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 100100;
typedef long long ll;
struct node
{ll x1, y1;ll x2, y2;int flag;
}a[N];int main()
{int n, m;scanf("%d%d", &n, &m);for(int i = 0; i < n; ++i){scanf("%lld%lld%lld%lld", &a[i].x1, &a[i].y1, &a[i].x2, &a[i].y2);}ll x = a[0].x1, y = a[0].y1;ll L = 0;for(int i = 1; i < n; ++i){L += min(abs(a[i].x1 - a[i - 1].x1) + abs(a[i].y1 - a[i - 1].y1) + abs(a[i].x2 - a[i - 1].x2) + abs(a[i].y2 - a[i - 1].y2), abs(a[i].x1 - a[i - 1].x2) + abs(a[i].y1 - a[i - 1].y2) + abs(a[i].x2 - a[i - 1].x1) + abs(a[i].y2 - a[i - 1].y1));}L += abs(a[n - 1].x1 - a[n - 1].x2) + abs(a[n - 1].y1 - a[n - 1].y2);printf("%lld", L);  //本oj或者本题I64d会wa,当初一度自闭。return 0;
}

C:最小边覆盖

点不能被多余的边重复盖,所以每次输入时记录下被覆盖的次数,如果重复了就不合法。

#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
int cnt[N], a[N], b[N];
int main(){int n, m;scanf("%d%d", &n, &m);for(int i = 0; i < m; ++i){scanf("%d%d", &a[i], &b[i]);cnt[a[i]]++, cnt[b[i]]++;}for(int i = 0; i < m; ++i){if(cnt[a[i]] > 1 && cnt[b[i]] > 1){printf("No\n");return 0;}}printf("Yes\n");return 0;
}

F:小小马

满足大于等于3行4列的网格,并且起点和终点奇偶性不同的都符合,小于的需要进行特判是否满足

#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
int main(){int n, m, sx, sy, ex, ey;cin >> n >> m >> sx >> sy >> ex >> ey;if(n >= 3 && m >= 3){if((n == 3 && m == 3) && (sx == 2 && sy == 2)||(ex == 2 && sy == 2)){printf("No\n");return 0;}if((sx%2 + sy%2)%2 ==( ex%2 + ey%2)%2) printf("No\n");else printf("Yes\n");}else{if((sx + 2 == ex && sy - 1 == ey)||(sx + 2 == ex && sy + 1 == ey)||(sx - 2 == ex && sy - 1 == ey)||(sx - 2 == ex && sy + 1 == ey)||(sx + 1 == ex && sy - 2 == ey)||(sx + 1 == ex && sy + 2 == ey)||(sx - 1 == ex && sy + 2 == ey)||(sx - 1 == ex && sy - 2 == ey))printf("Yes\n");elseprintf("No\n");}return 0;
}

G:置置置换

dp,dp[i][j] 表示 i 位置的数为 j 的方案数。

当i为奇数时,可以推导dp[i][j] = dp[i-1][j-1] + dp[i -1][j - 2] + ……+dp[i - 1][1]。就是i前面位置可以有j - 1个情况

当i为偶数时,那么如何得到由前面的状态dp[i][j]呢?有这个一个有趣的性质,比如对于一个排列{1,3,2},现在我们在递推得到dp[4][2],也就是要把2添加到这个排列的最后面,现在把当前排列即{1,3,2}中大于等于2的全部加上一得到{1,4,3},这样是仍然不会改变题目给出的关系的,然后我们再把2添加到最后,{1,4,3,2},就可以得到dp[4][2]了,即dp[i][j]={dp[i-1][i-1]+dp[i-1][i-2]+……+dp[i-1][j]}。

利用前缀和优化,

sum[i][j] = (sum[i][j - 1] + sum[i - 1][j - 1]  - sum[ i - 1][0] ), 其中sum[ i - 1][0]为0

sum[i][j] = (sum[i][j - 1] + sum[i - 1][i - 1] - sum[i - 1][j - 1] )。

#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
const int mod = 1e9 + 7;
typedef long long ll;
ll sum[N][N];
int main(){int n;scanf("%d", &n);sum[1][1] = 1;for(int i = 2; i <= n; ++i){for(int j = 1; j <=i; ++j){if(i&1)sum[i][j] = (sum[i][j - 1] + sum[i - 1][j - 1] + mod)%mod;elsesum[i][j] = (sum[i][j - 1] + sum[i - 1][i - 1] - sum[i - 1][j - 1] + mod)%mod;}}printf("%lld\n", sum[n][n]);return 0;
}

I :咆咆咆哮

贪心,由于我们不确定选a方案的数量,所以我们枚举一下,找出这么多次中最大的收益,具体看代码

#include <cstdio>
#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1005;
typedef long long ll;
struct node
{int a, b, s; //s为收益bool operator > (const node &x)const{return s > x.s;}
}arr[N];int main()
{int n;scanf("%d", &n);for(int i = 1; i <= n; ++i)scanf("%d%d", &arr[i].a, &arr[i].b);ll ans = 0;for(int i = 1; i <= n; ++i) // 枚举a的数量{for(int j = 1; j <= n; ++j) //计算出i个a时的收益arr[j].s = arr[j].a - i * arr[j].b;sort(arr + 1, arr + n + 1, greater<node>()); //排序后贪心ll t = 0;for(int j = 1; j <= n; ++j) //前i个用a,后面的选b{if(j <= i)t += arr[j].a;elset += i * arr[j].b;}ans = max(ans, t);    //找出最大的}printf("%lld", ans);return 0;
}

2018 秦皇岛CCPC-Wannafly Winter Camp Day4 Div2 题解相关推荐

  1. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  2. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  3. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  4. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟

    链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  5. 2020 CCPC Wannafly Winter Camp Day7 K 修炼

    题意: 一个游戏,规则如下: 有六个值 v 1 , v 2 , a 1 , a 2 , b 1 , b 2 v_1,v_2,a_1,a_2,b_1,b_2 v1​,v2​,a1​,a2​,b1​,b2 ...

  6. 2019 CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题记录

    一篇来自ACM入门者的补题记录 最近有点懒,想着还有最后一篇博客没完成,是我最大的补题动力. 不过终于在camp过去三个月的时候完成了所有的补题博客,有点欣慰,下一个目标应该是补一补一年前暑期训练的题 ...

  7. 2019 wannafly winter camp day5-8代码库

    目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sortin ...

  8. 2018秦皇岛ccpc赛后总结

    在赛前一周左右知道了自己要去参加这个比赛,怎么说,第一次参加这比赛还是有一点激动的(主要是出去这么远外加第一次坐飞机),在24号的时候便和女朋友买完了该带的东西. 26号早上7点钟起来开始收拾东西,以 ...

  9. 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)(补题记录)

    一篇来自ACM入门者的补题记录 文章目录 A.机器人 B.吃豆豆 C.拆拆拆数 E.流流流动 F.爬爬爬山 I.起起落落 J.夺宝奇兵 A.机器人 题意:有两条平行线段A,B,长度从1~n,机器人一开 ...

最新文章

  1. SAP COR2下达工单,报错 System status APNG is active 之对策
  2. MFC:总结篇 CDialog 类
  3. CodeForces - 1263A Sweet Problem(思维,水题)
  4. windows安装程序创建_如何在Windows上创建已安装程序的列表
  5. 按照时间,每天分区;按照数字,200000一个分区
  6. 诗与远方:无题(二十二)
  7. test dword ptr [eax],eax ; probe page.
  8. Windows手机开发工具与资源
  9. JS中浅拷贝和深拷贝的使用,深拷贝实现方法总结
  10. 【java学习之路】(java SE篇)011.线程池
  11. IE 8 HTML Parsing Error:Unable to modify the parent container element before the child element is...
  12. UniBeast使用心得
  13. 真么找计算机用户密码,如何查找电脑的用户名和密码
  14. 小米手机怎么录制视频 手机录制视频的方法
  15. ,片片鳞甲都烁烁生辉
  16. C语言的前置++和后置++
  17. DHCP服务配置-Cisco模拟器
  18. 虚拟机Ubuntu18.04开机后没有网络的解决办法
  19. java与单片机通信_Java实现串口通信与单片机通信实例..【Pnoter】
  20. 5.爬取5K分辨率超清唯美壁纸

热门文章

  1. 机器学习实战2.3. k-近邻算法例子-识别手写数字
  2. 3D建模界扛把子之Maya,技能适用范围详解
  3. GitHub:全国各省市烂尾楼停贷汇总(持续更新)
  4. Android studio中全屏显示
  5. 每天记录学习的新知识:利用高德地图绘制历史路线
  6. 20.UI自动化测试框架搭建-标记性能较差用例
  7. 挑起华语电影大梁后,金鸡奖正在借前沿技术实现蜕变
  8. 一图看懂!RK3568与RK3399怎么选?
  9. 什么是Deeplink?以及Deeplink的原理
  10. 搭建自己的智能家居系统