【HDU 6014】

SOLVED

【题目大意】给定N个节点,两点之间距离是节点编号的与,在这样的前提下,求最小生成树,输出代价和路径

【思路】通过lowbit求第一个0的位置,然后令此位为1的值就是最优解

【总结】1.与或非都要先考虑拆分后二进制的特性

2.检验算法正确性时,验证数据要是自己验证能力的最大值

(就是多验)

#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<string>
#include<cstring>
#include<climits>
#include<cmath>
#include<map>
#include<set>
#include<deque>
using namespace std;
const int maxn = 2e5 + 10;
int arr[maxn];
int lowbit(int x)
{return x & -x;
}
int main()
{ios_base::sync_with_stdio(false);int T;cin >> T;while (T--){int N;cin >> N;int cal = 0;for (int i = 2; i <= N; i++){if ((i & 1) == 0)arr[i] = 1;else{int t =lowbit((i + lowbit(i)));if (t <= N)arr[i] = t;else{arr[i] = 1;cal++;}}}cout << cal << "\n";for (int i = 2; i <= N; i++){cout << arr[i];if (i != N)cout << ' ';}cout << "\n";}
}

View Code


【HDU 6015】

UNSOLVED


【HDU 6016】

SOLVED

【题目大意】给数字N,要求将数字1~N分成k堆,每一堆的总和都相等,如果能则输出“yes”,并输出方案,如果不行输出“no”

【解题思路】

分类讨论

一种是n/k是偶数的,直接取头取尾然后分配就行,

一种是奇数,取前3k个,然后对后面剩余的取头取尾分配

(此处应有取前3k个可行的证明)

然后就是几个特判(程序要优美就不应该有特判)

当k==1时,输出全部

当1~N的总和不能整除k时,输出no

当k==n时输出no

#include<cstdio>
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
const int MAXN = 100010;
vector<int> ans[MAXN];
ll n, k;
void solve()
{if ((n*(n + 1) / 2) % k != 0 || (k == n&&k!=1)){printf("no\n");return;}ll d = n / k;printf("yes\n");if (k == 1){for (int i = 1; i <= n; i++){printf("%d", i);if (i != n)printf(" ");elseprintf("\n");}return;}if (d & 1){ll sum =( (1 + 3*k)*3 / 2);//printf("sum  == %lld \n", sum);for (int i = 1; i <= k; i++){ans[i].push_back(i);}int tot = k + 1;for (int i = k; i > 0; i -= 2){ans[i].push_back(tot), tot++;}for (int i = k - 1; i > 0; i -= 2){ans[i].push_back(tot), tot++;}for (int i = 1; i <= k; i++){ans[i].push_back(sum - ans[i][0] - ans[i][1]);}tot = 1;ll d = ((n-3*k) / k)/2;for (int i = 1; i <= k; i++){for (int j = 1; j <= d; j++)ans[i].push_back(3 * k + tot),ans[i].push_back(n + 1 - tot),tot++;}for (int i = 1; i <= k; i++){for (int j = 0; j < ans[i].size(); j++){printf("%d", ans[i][j]);if (j == ans[i].size() - 1)printf("\n");elseprintf(" ");}}for (int i = 1; i <= k; i++)ans[i].clear();}else{int cnt = 1;for (int i = 1; i <= k; i++){for (int j = 0; j <d/2; j++){printf("%d %d", cnt, n + 1 - cnt);if( j == (d / 2) - 1 )printf("\n");elseprintf(" ");cnt++;}}}return;
}
int main()
{int T;scanf("%d", &T);while (T--){scanf("%lld%lld", &n,&k);solve();}return 0;
}

View Code


【HDU 6017】

UNSOLVED


【HDU 6018】

UNSOLVED


【HDU 6019】

UNSOLVED


【HDU 6020】

SOLVED

【题目大意】给一个4*4的数字谜题,能否恢复到指定形状

【思路】数字谜题的结论

#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<string>
#include<cstring>
#include<climits>
#include<cmath>
#include<map>
#include<set>
#include<deque>
#include<unordered_map>
using namespace std;
struct node
{int arr[5][5];bool operator<(const node& a)const{for (int i = 1; i <= 4; i++){for (int j = 1; j <= 4; j++){if (arr[i][j] >= a.arr[i][j])return false;}}return true;}node() {};node(const int a[][5]){for (int i = 1; i <= 5; i++){for (int j = 1; j <= 5; j++){arr[i][j] = a[i][j];}}}
};
map<node, int>mp;
int arr[16];
const int mx[4] = { 0,-1,0,1 };
const int my[4] = { 1,0,-1,0 };
int main()
{ios_base::sync_with_stdio(false);int T;cin >> T;while (T--){int cal = 0;int px;for (int i = 1; i <= 16; i++){int n;cin >> n;if (n == 0){px = (i - 1) / 4 + 1;continue;}arr[++cal] = n;}int cnt = 0;for (int i = 1; i <= 15; i++){for (int j = i + 1; j <= 15; j++){if (arr[i] > arr[j])cnt++;}}if ((cnt + 4 - px) % 2 == 0)cout << "Yes\n";elsecout << "No\n";}
}

View Code


【HDU 6021】

UNSOLVED


【HDU 6022】

UNSOLVED


【HDU 6023】

SOLVED

【题目大意】

【思路】对素数进行特殊处理,先求N^1/5,于是剩下的素数的幂次最高只能是4了,可以二分开根迅速求解

#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll pri[10001];
int vis[10001];
int cntp;
void init()
{for (ll i = 2; i < 10000; i++){if (!vis[i]){cntp++;pri[cntp] = i;}for (int j = 1; j <= cntp&&pri[j]*i<10000; j++){vis[i*pri[j]] = 1;if (i%pri[j] == 0){break;}}}
}
ll sqrt(ll num,int d)
{ll l = 1, r = num;while (l <= r){ll mid = (l+r) / 2;ll tmp = LLONG_MAX;if(d==3){tmp = tmp / mid;}if (d == 4){tmp = tmp / mid;tmp /= mid;}if (tmp / mid < mid){r = mid - 1;continue;}tmp = 1;for (int i = 1; i <= d; i++)tmp *= mid;if (tmp == num)return mid;if (tmp > num)r = mid - 1;elsel = mid + 1;}return 0;
}
int main()
{init();int T;scanf("%d", &T);while (T--){ll n;scanf("%lld", &n);int ans = INT_MAX;for (int i = 1; i <= cntp; i++){if (pri[i] > n)break;int cnt = 0;while (n%pri[i] == 0){cnt++;n/= pri[i];}//if (cnt)//    printf("cnt %d pri %lld\n", cnt, pri[i]);if (cnt < ans && cnt)ans = cnt;}int res = INT_MAX;if (n>1){if (sqrt(n, 4))res = min(res, 4);else{if (sqrt(n, 2))res = min(res, 2);}if (sqrt(n, 3))res = min(res, 3);if (res == INT_MAX && n > 4500)res = 1;}printf("%d\n", min(ans,res));}    //printf("1000000000000000000 %lld  %lld\n", sqrt(1000000000000000000, 3), sqrt(1000000000000000000, 2));return 0;
}

View Code

转载于:https://www.cnblogs.com/rentu/p/11297739.html

杭电多校(四)2019.7.31--暑假集训相关推荐

  1. 【训练题48:想法 + 模拟】Lawn of the Dead | HDU6992 | 杭电多校四 08题

    题意 [2021"MINIEYE杯"中国大学生算法设计超级联赛(4)]Lawn of the Dead | HDU6992 n×mn\times mn×m 的网格 有 kkk 个土 ...

  2. 2019年杭电多校第一场 1001题blank(DP)HDU6578

    2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...

  3. 2019杭电多校 第七场 Kejin Player 6656(求期望值)

    2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...

  4. 2019杭电多校第9场1002 Rikka with Cake HDU6681

    2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...

  5. 2019暑期杭电多校HDU6599 I Love Palindrome String

    2019杭电多校HDU6599 I Love Palindrome String 题目链接 I Love Palindrome String Time Limit: 4000/2000 MS (Jav ...

  6. 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)

    [2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...

  7. 2022杭电多校(四)

    2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...

  8. 2019.7.29 杭电多校第三场小结

    index > 杭电多校第三场 题号 标题 AC 做法 状态 6603 Azshara's deep sea (51/150)34.00% 6604 Blow up the city (213/ ...

  9. 2021杭电多校补题——第一场

    2021杭电多校补题--第一场 文章目录 Mod, Or and Everything Rocket land(待补) Puzzle loop(待补) Another thief in a Shop( ...

  10. 2022杭电多校(二)

    2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...

最新文章

  1. GO Negotiation流程分析
  2. 5G:这次中国说了算!
  3. Picasso fit() centerCrip() centerInside()
  4. Bootstrap 表格 笔记
  5. 台电+android+电话,通话系统_台电 G17s_平板电脑评测-中关村在线
  6. FCPX无缝扭曲过渡转场Twirl Transition Pack for Mac
  7. 看看什么样的人适合网上开店( 转载)
  8. CakePHP 2.x CookBook 中文版 第七章 模型 之 数据校验
  9. ios状态栏字体颜色设置白色
  10. 《web课程设计》期末网页制作 基于HTML+CSS+JavaScript制作公司官网页面精美
  11. Java3:数组和字符串
  12. 欧几里德游戏(归纳总结)
  13. vue+websocket+nodejs实现聊天室 - 消息已读未读
  14. 用户输入邮箱,验证邮箱格式是否正确(验证用户输入的邮箱地址中是否含有字符'@')
  15. imx6ull驱动开发经验
  16. 大数据高效找所有素数/质数的算法
  17. 从零开始学习大数据系列之Linux-02Vim与Shell script
  18. 有免费而且好用的视频会议吗
  19. php滑动teb效果,PEB和TEB资料整合
  20. 小酌重构系列[17]——提取工厂类

热门文章

  1. MongoDB Windows环境安装及配置
  2. 如何利用webmin在Linux主机中添加网站
  3. Windows7是什么
  4. GridView分页(第一页、上一页、下一页、最后页、当前页数/总页数)
  5. 类中静态成员变量 无法解析的外部符号
  6. 爱上MVC~为DisplayNameFor添加扩展,支持PagedList集合
  7. 加强linux操作系统DNS服务安全
  8. 阿里云的服务器内网互通的前提条件
  9. 关于系统重装的一件小事
  10. 如何用css实现等高布局。