YCOJ5月26日赛
1.因数的个数
Description
给定正整数N,求N的阶乘N!的因数的个数。由于答案可能非常巨大,只需要输出模109+710^9+7109+7后的余数。
Input
第1行:1个整数,表示N
Output
第1行:1个整数,表示答案。注意,答案要模1000000007
Sample Input 1
3
Sample Output 1
4
Sample Input 2
1000
Sample Output 2
972926972
开始一看,哇,好简单~蒟蒻的未来到了。
然而,不到10分钟,情况很尴尬。
关于样例1,虽然正确了,But,只有样例1正确了。。。
样例二什么鬼?
数据太大,一直卡着。。。
考完后,在A了它。
而实际它就是一道数论题。
#include<bits/stdc++.h>
using namespace std;int n;
int a[10100];long long ans=1;void solve(int x){for(int i=2;i<=x;i++){ while(x%i==0){x/=i;a[i]++;}}
}int main(){cin >> n;for(int i=2;i<=n;i++){solve(i);}for(int i=2;i<=n;i++){a[i]++;ans*=a[i];ans%=1000000007;}cout << ans;return 0;
}
2.洪水
Description
魔法森林的地图是R行C列的矩形。能通行的空地表示为’.’,C君倾倒洪水的地点标记为’*’,无法通行的巨石阵标记为’X’,海狸的巢穴标记为’D’,而画家和三只小刺猬的初始位置标记为’S’。
每一分钟,画家和三个小刺猬可以走到相邻(上、下、左或右)的四个空地之一。与此同时,洪水每一分钟也会扩大到相邻(上、下、左或右)的所有的空地。一旦空地被淹没,就无法再通行。洪水无法通过巨石阵。但是海狸的巢穴建在很高的地方,永远不会淹没。
注意,画家和三只小刺猬无法进入即将被淹没的空地,即如果他们与洪水在同一分钟到达某个空地,就不能进入。
编写一个程序,给定一个魔法森林的地图,输出为了让画家和三只小刺猬安全地到达海狸的巢穴所需的最短时间。
Input
第1行:2个整数R,C
接下来R行,每行C个字符 (’.’, ‘*’, ‘X’, ‘D’ 或 ‘S’)
地图只含有恰好1个’D’和1个’S’,而’*'可能有零个或多个
Output
1个整数,表示最短的到达狸的巢穴所需的时间。如果无法到达,输出"KAKTUS"
Sample Input 1
3 6
D…*.
.X.X…
…S.
Sample Output 1
6
Sample Input 2
3 3
D.*
…
…S
Sample Output 2
KAKTUS
Sample Input 3
3 3
D.*
…
.S.
Sample Output 3
3
考试时,我一脸懵逼的看着它。所幸,我还有一个数据可骗。。。
回到正题,实际上只要多打几个标记,标记不同事物,就可以了。
开了两个bfs,然后在这次也学到了pair,用它将两个数据合成一个数据。
#include<bits/stdc++.h>
using namespace std;const int maxn=1010;int n,m;
int a[maxn][maxn];
int sx,sy,xx,yy,xk,yk; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};bool in(int x, int y)
{return 1 <= x&&x<=n&&1 <= y&&y <= m;
}queue<pair<int , int> > qu;void bfs1(){// qu.push(make_pair(xk,yk));
// a[xk][yk] = 1;while(!qu.empty()){int x = qu.front().first;int y = qu.front().second;qu.pop();for(int i=0;i<4;i++){int tx = x + dir[i][0];int ty = y + dir[i][1];if(in(tx,ty)&&a[tx][ty] == 0){qu.push(make_pair(tx,ty));a[tx][ty] = a[x][y] + 1;} }}
}int bfs2(){
// queue<pair<int , int> > qu;qu.push(make_pair(sx,sy));a[sx][sy] = -1;while(!qu.empty()){int x = qu.front().first;int y = qu.front().second;qu.pop();for(int i=0;i<4;i++){int tx = x + dir[i][0];int ty = y + dir[i][1];if(tx == xx && ty == yy){return abs(a[x][y]);}if(in(tx,ty)&&(a[tx][ty]==0||abs(a[x][y]-1)<a[tx][ty])){qu.push(make_pair(tx,ty));a[tx][ty] = a[x][y] - 1;} }}return -1;
}
int main(){cin >> n >>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){char ch;cin >> ch;if(ch == 'X') a[i][j] = -1;if(ch == 'S') sx=i,sy=j;if(ch == 'D') {xx=i,yy=j; a[i][j]=-1;}if(ch == '*') {qu.push(make_pair(i,j));a[i][j]=1;}}} bfs1();int ans = bfs2();if(ans==-1){cout <<"KAKTUS";}else{cout << ans;}return 0;
}
3.关押罪犯
Description
S 城现有两座监狱,一共关押着 N名罪犯,编号分别为 1 ~ N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用 “怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 c 的冲突事件。
每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。
在详细考察了 N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。
那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?
Input
输入第一行为两个正整数 N(1≤N≤20000) 和 M(1≤M≤100000),分别表示罪犯的数目以及存在仇恨的罪犯对数。
接下来的 M 行每行为三个正整数 aj,bj,cja_j,b_j,c_jaj,bj,cj,表示 aja_jaj 号和 bjb_jbj 号罪犯之间存在仇恨,其怨气值为 cjc_jcj。数据保证 1<aj,bj≤N1<a_j, b_j \le N1<aj,bj≤N,0<cj≤1090 < c_j \le 10^90<cj≤109,且每对罪犯组合只出现一次。
Output
输出共一行,为 Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出 0。
Sample Input 1
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
Sample Output 1
3512
可能是开始没读懂题意,一直都没想出来。考完老师评讲,才完成的。
最后发现挺简单的,用结构体来做,放入每对犯罪和怨气值,重置cmp函数,排序,实际上跟并查集模板差别不大。
#include<bits/stdc++.h>
using namespace std;const int maxn = 200100;
const int maxm = 100100;
struct node{int u,v;int s;
}e[maxm];bool cmp(node a,node b){return a.s>b.s;
}int fa[maxn*2];
int n,m;
void init(){for(int i=1;i<=2*n;i++){fa[i] = i;}
}int get(int x){if(fa[x]!=x) fa[x]=get(fa[x]);return fa[x];
}void merge(int x,int y)
{fa[get(x)] = get(y);
}
int main(){cin >> n >> m;init();for(int i=1;i<=m;i++){cin >> e[i].u >> e[i].v >> e[i].s;}sort(e+1,e+m+1,cmp);for(int i=1;i<=m;i++){if(get(e[i].u)==get(e[i].v)){cout << e[i].s;return 0;}else{merge(e[i].u,e[i].v+n);merge(e[i].u+n,e[i].v);}
}cout << "0";return 0;
}
YCOJ5月26日赛相关推荐
- 【软考备战·希赛网每日一练】2023年4月26日
文章目录 一.今日成绩 二.错题总结 第一题 三.知识查缺 题目及解析来源:2023年04月26日软件设计师每日一练 一.今日成绩 二.错题总结 第一题 解析: 数据耦合:一组模块借助参数表传递简单数 ...
- el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
温馨提示:10月26日起,可转债交易需要先开权限(在券商APP.我的业务处办理),一定要提前操作好. 下面来看20201012-20201018一周新债情况. 本周上市 名称 上市日期 首日最高 首日 ...
- 互联网晚报 | 11月26日 星期五 | 饿了么成立蓝骑士智囊团;淘特上线“官方补贴日”;上海数据交易所揭牌成立...
今日看点 ✦ 腾讯云首个南美数据中心落地巴西圣保罗,加速海外云服务布局 ✦ 淘特上线"官方补贴日",百余种品牌货最低五折 ✦ 饿了么成立蓝骑士智囊团,反馈外卖配送问题参与优化产 ...
- 圣斗士星矢重生服务器维护,11月26日全服停机维护公告
雅典娜的圣斗士们: 为了给广大圣斗士提供更良好的修炼环境,圣域军团将于2013年11月26日(星期二)07:00至08:00对所有服务器进行例行停机维护更新,预计维护时间将持续约60分钟.届时请大家提 ...
- 云顶之弈5.26服务器维护,云顶之弈维护到几点 云顶之弈维护公告最新 云顶之弈12月26日几点能上...
云顶之弈维护到几点今天?云顶之弈新版本更新内容是什么?云顶之弈停机更新什么时候结束?想必有不少的小伙伴们都想知道吧,下面云顶之弈维护公告最新,感兴趣的小伙伴们一起来看看吧. 云顶之弈维护公告最新 维护 ...
- 围棋AI.续一.Sabaki+Leela Zero+Leelasabaki.2018年6月26日
前言 年初,伴随着围棋AI的兴起,自己也试着安装.对弈.随后将自己的安装.使用记录下来,在简书这个平台发布,方便感兴趣的网友安装使用.对应链接:https://www.jianshu.com/p/c4 ...
- ro手游服务器维护公告,仙境传说RO手游12月26日5点-11点停服维护公告-仙境传说RO手游12月26日更新了什么-Appfound...
仙境传说RO手游将会在12月26日5点-11点进行停服维护哦!那么想了解跟宠维护更新的小伙伴们,下面就让我们一起来看一下吧! 亲爱的冒险者, 我们将于12月26日5点-11点进行一次停服维护,此次维护 ...
- 01月26日【Python3 基础知识】
01月26日[Python3 基础知识] 5.1 九宫格 5.2 函数入门 5.3 判断某天为某年的第几天 5.1 九宫格 import random x = 0 l = [1,2,3,4,5,6,7 ...
- 2009年8月26日,用于win2003上的MSN不能正常使用
2009年8月26日. 也就是昨天咯. XP下的MSN完全正常,没有任何的异样. 但是,一大早,就有同事抱怨,他的MSN被强制更新,不更新就不能登录,更新之后却又报错.统计了一下,出现这个问题的,都是 ...
最新文章
- wp.qq.com.index.html,使用纯代码给WordPress添加文章目录功能,支持快速定位和多级目录...
- CentOS系统启动流程和系统初始化
- 04-String课后动手动脑
- OS- -内存之地址空间
- pytorch 和 tensorflow2.0 方法替换
- Python字符串之'\x00'与空串''的区别
- 血泪教训!拖垮公司的技术团队常用的 7 个操作
- VS打包项目详细解析
- Navicat for mysql 远程连接 mySql数据库10061错误问题
- swift扩展Extensions
- 超酷的界面原型设计工具Balsamiq Mockups
- SetCapture()函数和ReleaseCapture()
- 基于SAP HANA 的SAP系统 安装
- matlab linux命令行窗口,linux命令行运行matlab
- duet二重奏hp_Duet游戏安卓下载|Duet二重奏最新版下载v2.0.4-乐游网安卓下载
- python知网下载_GitHub - ppho99/CNKI-download: 知网(CNKI)文献下载及文献速览爬虫
- Hive DDL 数据定义语言
- Latex 1: 解决latex中遇到一个常见错误:Improper alphabetic constant.
- 被罚6500万,“偷税人”雪梨还能直播吗?
- fabs linux头文件,C/C++ algorithm头文件的max()、min()、abs()和math头文件的fabs(