ECPC-2015部分题解
A - Arcade Game
题意:给一个小于9位且每一位各不相同的数字,一次可以让这个数字的所有位重新排列,如果获得的排列是所有排列的最大情况则获胜,否则如果大于当前数字则可继续游戏,直到获胜或失败。
题解:直接用组合数做肯定会超时,可以通过推式子的方式推出所有情况
#include <bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;
const int M = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-3;
int a[20], b[20];
int len = 0;
bool check(){for(int i = 0;i<len;i++) if(a[i]!=b[i]) return false;return true;
}
void solve(){int n;cin>>n;len = 0;while(n){a[len++] = n%10;n/=10;}int sum = 0;for(int i = 0;i<len;i++){b[len-i-1] = a[i];}for(int i = 0;i<len;i++) a[i] = b[i];int flag = 0;n = 0;sort(a, a + len);if (!flag) {if (check()) {flag = 1;}}while(next_permutation(a,a+len)){if(flag) sum++;if(!flag){if(check()) flag = 1;}n++;}double ans;n++;if(sum==0) ans = 0;else ans = 1.0/n;double now = ans;for(int i = 1;i<sum;i++){now = now*(sum-i)*1.0/i*1.0/n;ans += now;}printf("%.9f\n",ans);
}
int main(){int t;cin >> t;while(t--){solve();}return 0;
}
C - Connecting Graph
题意:有两个操作,第一个操作在第i秒时连接u和v,第二个操作询问u和v最早的联通时间,如果未联通则输出-1
#include <bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;
const int M = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-3;
struct node{int u,v,w,next;
}a[M];
int f[N],cnt;
void add(int u,int v,int w){a[++cnt].v = v;a[cnt].w = w;a[cnt].next = f[u];f[u] = cnt;
}
int lg;
int father[N][30],root[N],Time[N][30],dep[N];
int lca(int u,int v){int x = u,y = v;if(dep[u] < dep[v]) swap(u,v);int Max = 0;for(int i = lg;i>=0;i--){if(dep[father[u][i]] >= dep[v]) {Max = max(Max,Time[u][i]);u = father[u][i];}}if(u==v) return Max;for(int i = lg;i>=0;i--){if(father[u][i]!=father[v][i]){Max = max(Max,max(Time[u][i],Time[v][i]));u = father[u][i],v = father[v][i];}}return max(Max,max(Time[u][0],Time[v][0]));
}
void dfs(int u,int fa){for (int j = 1; j <= lg; j++) {father[u][j] = father[father[u][j - 1]][j - 1];Time[u][j] = max(Time[u][j - 1], Time[father[u][j - 1]][j - 1]);}for(int i = f[u];i;i = a[i].next){int v = a[i].v,w = a[i].w;if(v==fa) continue;dep[v] = dep[u] + 1;father[v][0] = u;Time[v][0] = w;dfs(v,u);}
}
int c[N];
int getf(int v){if(c[v]==v) return v;else return c[v] = getf(c[v]);
}
void solve(){cnt = 0;memset(f,0,sizeof f);int n,m;cin>>n>>m;for(int i = 1;i<=n;i++) c[i] = i;lg = (int)(log(n)/log(2))+1;int type,u,v;vector<pair<int,pair<int,int>>> query;for(int i = 1;i<=m;i++){scanf("%d%d%d",&type,&u,&v);if(type==1){int id1 = getf(u),id2 = getf(v);if(id1==id2) continue;c[id1] = id2;add(id1, id2, i);add(id2,id1,i);}else{query.push_back({i,{u,v}});}}for(int i =1;i<=n;i++) if(c[i]==i){father[i][0] = i;Time[i][0] = 0;dep[i] = 0;dfs(i,-1);}for(auto it:query){int t = it.first,u = it.second.first,v = it.second.second;if(u==v) puts("0");else{int t1 = getf(u),t2 = getf(v);if(t1!=t2) puts("-1");else{int res = lca(u,v);printf("%d\n",res>t?-1:res);}} }
}
int main(){int t;cin >> t;while(t--){solve();}return 0;
}
L - Candy Jars
题意:给出n个罐子,每个罐子里装有一定数量的糖,每次选择一个罐子,扔掉其余所有糖,并将选择罐子里的糖分到所有罐子里使得所有罐子里都不为空。不能分配糖的人输。
#include <bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;
const int M = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-3;void solve(){int n;cin>>n;int flag = 0;for(int i = 1;i<=n;i++){int x;scanf("%d",&x);int w = x%((n-1)*n);if(w>=n||w==0){flag = 1;}}if(flag) puts("Alice");else puts("Bob");
}
int main(){int t;cin >> t;while(t--){solve();}return 0;
}
ECPC-2015部分题解相关推荐
- TJOI 2015 弦论 题解
题目传送门 题目大意: 求出一个字符串第 kkk 小的子串是谁. 题解 建出SAM,求出 sizesizesize 数组,即每个状态的 endposendposendpos 集大小,如果 t=0t=0 ...
- BZOJ3938 UOJ88:[集训队互测2015]Robot——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3938 http://uoj.ac/problem/88 小q有n只机器人,一开始他把机器人放在了一 ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- 2015年第六届蓝桥杯本科B组C++省赛个人题解
比赛结束已经一星期了,成绩也出来了,江苏非211组的省前十,但是深感自己还是有太多的不足.绝对不能以自己还只是大一为借口,acm这条路还长的很. 目测得了95分(满分150),第一题错了,代码填空第一 ...
- 2015 ACM/ICPC Asia Regional Shenyang Online题解
以下所有AC题解程序来自"仙客传奇"团队. AC题数:7/13 ABCFGJL A. Traversal AC的C++语言程序: #include <bits/stdc++. ...
- ccf-csp 2015春季真题题解
图像旋转 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可. 输入格式 输入的 ...
- ccf-csp 2015秋季真题题解
数列分段 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, -, ...
- 2015武汉大学第八届Eming杯现场赛E题题解
题目大意: 就是现在空间中给定球,平面和点的位置, 从点的位置作为点光源散发出光求球在平面上的投影面积. 大致思路: 本题并没有用到复杂的算法, 但是对于一些数学上的几何知识提出了一定的要求, 投影如 ...
- 2015年蓝桥杯省赛C++B组真题与题解
1 奖券数目 题目: 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖 ...
- 蓝桥杯2015年第六届C/C++ B组省赛习题题解
目录 第一题:奖券数目 第二题:星系炸弹(日期计算) 第三题:三羊献瑞(全排列) 第四题:格子中输出 第五题:九数组分数(dfs) 第六题:加法变乘法(枚举) 第七题:牌型种数(dfs+dp) 第八题 ...
最新文章
- baidumap api MySQL_百度地图API开发笔记一(基础篇)
- 小型化RDA5807调频收音模块实验板
- linux shell 语句出错自动退出 调试 检查 脚本
- 小郭经典mysql面试题资料_程序员经典面试题,Mysql是如何完成一次数据查询的...
- VTK:检查VTK的版本用法实战
- Angular karma test.ts里一些标准api用console.log打印出的输出
- Springboot 整合mybatis,实现多数据读写分离分库分表
- spring boot 定时间任务
- 21天Jenkins打卡Day17-查看Jenkins服务器上的目录结构
- 【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)
- Android MDM 参考资料
- 文献管理软件 EndNote20.1 for Windows版
- 将m个相同的球全部放到n个相同的盒子里面有几种放法
- 类工厂模式(TDB)
- python爬虫_网易音乐歌单
- 开源mysql执行平台_MySQL自动化审核平台部署说明
- 微信公众号、小程序账号被冻结的解决方法
- omap4430驱动
- phaser3适配微信小游戏
- B-Tree和LSM-Tree 优缺点对比
热门文章
- Codeforces Round #459 (Div. 1) B. MADMAX(dp+博弈)
- java qq聊天界面_用Java制作一个简单的QQ聊天界面
- 嵌入式软件工程师成长---所需要看的书籍
- 用Unity的GetSpectrumData方法识别钢琴曲中的钢琴琴键
- .Net 文件名后缀的详细解释
- Mac下驱动BCM20702A0 USB蓝牙
- excel怎么将文本转为数值
- item_search_img - 拍立淘搜索淘宝商品(淘宝API)
- 小米平板2,Windows10与Android互刷教程,小米平板2 线刷教程
- CNZZ埋点及点击量统计方法