博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #479 (Div. 3) 的 E D
阅读量:4143 次
发布时间:2019-05-25

本文共 2812 字,大约阅读时间需要 9 分钟。

*2 /3这个题  (D)

/*

其实可以bfs什么的也可以写的,但是!不枉我昨天体育课一直在想,它是有规律的

规律就是这张图,因为你如果看到的是2的话,2 的很多很多次方都只能由2相乘得来,3 是搞不出来的,3又不能累加到后面去只能除掉,除掉到没有3 只有2的情况,所以排序一下,把3因子多的放在前面,这样才能够完成计算。。不然怎么算-。-以及每个3*3*3  里面再按 2 *3*3*3  3*3*3这样的,不然消除不掉啊。是不是非常简单-。-

应该拿草稿纸写一下... 中间其实想过,但是自己觉得如果3插在中间呢?1 2 3 4 6  12  12/3 又回到4  然后6  8   什么的  开始一个新的世界,其实应该多写一下发现规律,因为8之后再怎么乘2其实都搞不出来任何一个3了。而且只能变大。变小接不上后面的3。数学里面啊,大概因子是个非常神奇的东西吧。

zj还说过路径是唯一的,所以要么*2 要么/3   路径唯一并且元素不会重复 第一个肯定是 3 的因子最多的那个,似乎有几分道理好像我也不是很懂-.-

*/

D好歹还过了-.-  稍微注意一下  这个three的写法(狗头给你打包!)

统计的话怎么不能让n/3呢!觉得不对自己手写模拟一下过程!这就好像是统计数据位数长度一样,这个地方看一下!

#include 
#include
#include
#include
using namespace std; typedef long long ll;ll a[105];ll three(ll x){ ll res = 0; while (x % 3==0) { res++; x /= 3; } return res;}bool cmp(ll x, ll y) { ll thx = three(x); ll thy = three(y); if (thx == thy) return x < y;//小的排在前面 return thx > thy;//thx 大的 排在前面}int main(){ int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; //cout << three(a[i]); } //cout << a[n-1]; sort(a, a + n, cmp); for (int i = 0; i < n-1; i++) cout << a[i] << " "; cout << a[n - 1] << endl; return 0;}

====下面是吐槽而不是题解=====(我知道写了没用可是就是忍不住写x...)

写代码要简洁-.-  要简洁-.-如果可以合并其实就没事了0.0,比如昨天写的那个有点像图论的题

其实只要size()==2的时候有用,其他的都是其他情况,然后完全可以只写一个if else(`・ω・´)ゞ(`・ω・´)ゞ写多了又会乱掉

其实也可以并查集写的,只要把那些加了两次的fa设为0,最后看有多少个fa什么的就可以了。

如果用我那种非常朴素的做法,就是如果size是别的 1 3 4 0 ..  就continue掉  如果别的  就以连通的方式搜它一下....

其中我写搜的方式花了点时间...但是感觉很奇妙 感觉像是真的自己在拓展新的东西-.-虽然最后改了几次 还是T了 T 了  认命了哈哈哈还是回去写bfs吧

/* 到40 挑战四分钟写多少字计划  还是及时写下来有用 惊叹号!!!你可以打的很快 那就把这一刻的感受记录一下!!*/

E的代码也扔一下吧,好歹优化了两次-.-还是t  dfs可以做 有空补一下dfs的代码(有空才怪...高数什么时候有空写了-.-)

#include
#include
#include
#include
#include
using namespace std;vector
g[200005];bool visit[200005] = { 0 };int main() { int n; int k; int a; int b; while (cin >> n >> k) { // int z; //n是有几个点!!!! k是有几条Bian!!! for (int i = 1; i <= k; i++) { scanf_s("%d%d", &a, &b); //cin >> a >> b; g[a].push_back(b); g[b].push_back(a); }//bool flag = true; int ans = 0; for (int i = 1; i <= n; i++) { if (visit[i] == 1)continue; else if (g[i].size()==2) { bool flag = true; int x; x = i;//初始值 int z = 0; int y = g[x][0];//第一个 if (g[y].size() == 2) { if (g[y][0] == x) z = g[y][1]; else z = g[y][0]; } visit[y] = 1; visit[x] = 1; if (g[x].size() != 2)flag = false; if (g[y].size() != 2)flag = false; while(z!=i)//??一个满足了就可以的 { if (g[y].size() == 2) { int fa = y; int temp; temp = y; y = z; x = temp; if (g[z].size() == 2) { if (g[z][1] == fa)z = g[z][0]; else z = g[z][1]; } visit[y] = 1; visit[x] = 1; visit[z] = 1; } if (g[z].size() != 2 || g[x].size() != 2 || g[y].size() != 2) { flag = false; break; } } if (flag == true) ans++;}else{ visit[i] == 1; continue;} } cout << ans << endl; } return 0;}//贴这干啥啊
//啊...纪念一下吧-.-

转载地址:http://xquti.baihongyu.com/

你可能感兴趣的文章
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>