Mdoi R2 洛谷4月月赛I DIV2

A Car

题目描述

在MDOI市, 为了推行环保, 一辆车是否被限行的依据时车牌号和当天的日期。
车牌号的编码方式是这样的:
**·**前三位均为大写字母, 表示所在的地区。
·后五位为大写字母或数字, 为识别码保证至少有一个数字。
**·**车牌号的尾号是从右往左的u哦个数字。
MdOI市在本题的编码方式下前3为是MDA。例如, MdOI市有一辆识别码为6780p的车, 他的车牌号就是MDA6780p尾号是0.
在MdOI市, 车辆限行规则如下:
1.对于外来车( 即前三位编号非MDA).工作日(星期一至星期五)均限行。
2.对于其他本地车, 每天会限行某些尾号的汽车。周一到周五的限行尾号如下:

日期 星期一 星期二 星期三 星期四 星期五
限行尾号 1和9 2和8 3和7 4和6 5和0

小 C 告诉了你她的车牌号,她想知道,她的车在星期一到星期五中的哪些日期会被限行。请你帮帮她。

题目思路

纯模拟, 注意字母和数字的转化。还有尾号与日期的一一对应, 如果不是这个城市的车, 输出5个1.

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<deque>
#include<cstdlib>
#include<ctime>
#include<cctype>
#include<list>using namespace std;string s;
int last;
map<int, int>mp;
int main()
{for(int i = 1; i <= 5; i++){mp[i] = i;mp[10-i] = i;}mp[0] = 5;cin >> s;for(int i = s.size() - 1; i >= 3; i--){if('0' <= s[i] && s[i] <= '9'){last = s[i] - '0';break;}}if(s[0] != 'M' || s[1] != 'D' || s[2] != 'A'){printf("%d %d %d %d %d\n", 1, 1, 1, 1, 1);return 0;}for(int i = 1; i <= 5; i++){if(i == mp[last]){printf("%d ", 1);}else{printf("%d ", 0);}}cout << endl;return 0;
}

B Mayuri

题目描述

在离开这个世界前,万由里想要寻找属于她的 Lucky Number。
万由里会给出一数a, 以及一个长度为b的01串S。
简单地说, 她的Lucky number 是满足以下条件的正整数n:
· n的位数为b且n不含前导0.
· 若S的第i位为1, 则n的前i为组成的数是a的倍数, 否则不是。
对于一个数, 前i位组成的数是指这个数前i个数码依次拼接形成的数。如312311前3位组成的为312, 前5位位31231.
现在, 请你帮助万由里计算一下, 他的Lucky Number 是多少。
由于满足条件的数有多个, 输出最小的一个。若不存在, 输出*-1*。

题目思路

假如说有3位, a为3。当前的数字前两位为30.S的最后一位是1。
那么就应该填0.
如果S最后一位是0.
那么就应该填1.
可见前i位组成的数中, 假设前j位被整除, 那么其实只要考虑剩下的i-j位即可。
所以我们设一个数now, 从高位向低位依次在S字符串的前提下找最小的数。因为最小, 所以从0开始, 一直到9, 如果这一位哪个都不能填, 直接输出-1.
还有, 如果这一位添加到now后被a整除的话, 那么清0, 因为后面的判断他起不了作用, 否则now * 10 + 当前位数。
还有注意第一位不能从0枚举。
对了, 特判a = 10, S长度为1的情况。

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<queue>
#include<deque>
#include<cstdlib>
#include<ctime>
#include<cctype>
#include<list>using namespace std;int a, b;
string s;
int c[100010];
int main()
{cin >> a >> b;cin >> s;if(a == 10 && b == 1){cout << -1 << endl;return 0;}for(int i = 0; i < s.size(); i++){c[i+1] = s[i] - '0';}long long now = 0; char ans[100010];int t = 0;for(int i = 1; i <= s.size(); i++){now *= 10;int cnt = 0;if(c[i] == 1){for(int j = 0; j < 10; j++){long long nowi = now + j;if(nowi % a == 0){if(i == 1){if(nowi < a){cnt++;continue;}}ans[++t] = j+'0';now = 0;break;}else{++cnt;continue;}}}else{for(int j = 0; j < 10; j++){long long nowi = now + j;if(nowi % a == 0){ ++cnt;continue;}else{now = nowi;ans[++t] = j + '0';break;}}} if(cnt == 10){cout << -1 << endl;return 0;}}//long long nowi = now;//while(nowi != 0)//{//    rev[++q] = nowi%10;//    nowi /= 10;//}//for(int k = q; k >= 1; k--)//{//  ans[++t] = rev[k] + '0';//}for(int i = 1; i <= t; i++){cout << ans[i];}cout << endl;return 0;
}

C Odyssey

题目描述

若正整数a, b, 满足:
存在正整数c使得ab=ckab = c^kab=ck。
则称(a,b)(a, b)(a,b)为完美数对。
有一个包含n个节点和m条边的有向无环图, 这张图中的每条边都有权值和长度两个属性。
如果一条路径P满足以下条件之一, 则称其为一条完美路径:

  1. P中仅包含一条边。
  2. P从起点开始依次为e1,e2,e3,...epe_1,e_2,e_3,...e_pe1​,e2​,e3​,...ep​这p(p≥2)p(p\ge2)p(p≥2)条边, 对于任意的1≤i≤p−11\le i \le p-11≤i≤p−1, eie_iei​的权值和ei−1e_{i-1}ei−1​的权值组成完美数对。
    你需要求出途中最长完美路径的长度, 一条路径长度定义为这条路径上所有边长度之和 。

题目思路

发现一个性质, 其实每一个数, 他的对应的完美数对的公共因子都有一个是相同的p, 使得每个数都是p的k次方的方。所以我们可以找出那个相应的可以成完美数对的数.
如果想让这个数唯一怎么办, 取模!!!
首先质因数分解。拆成p1a1×p2a2....×pSaSp_1^{a_1} \times p_2^{a_2} .... \times p_S^{a_S}p1a1​​×p2a2​​....×pSaS​​的形式。如 16 = 24;
然后对指数取模, 模数为k, 如k = 3时, 24%3 = 2;
而能与 2 构成完美数对且所有指数都小于等于 2 的数只有4;
所以这个数首先他的指数要小于模数, 然后这个数与取模后的数相乘等于ck, 显然这个数唯一。
检验:16∗4=64=4316 * 4 = 64 = 4^316∗4=64=43, 符合条件。
对于每条边, 他的权值我们都按以上方式处理。然后记到f数组中去。
即f[16] = 4; f[4] = 16;接着,对于每个i和f[i], 跑一层拓扑排序, 再建图的时候建分层图, 防止原来的长度和新确定的长度混掉, 开点的时候接在n点的后面, 则1点对应的点为1+n, 同理,2点为n+2, 以此类推。1点的权值为w, 则1+n就为f[w], 同时,长度赋值为1到2点的长度, 还有, 1+n到2点也赋值上相同的长度, 在这上面进行拓扑排序即可。

L
L
L
1
2
1+n

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){register int x=0;register bool f=0;register char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-48;c=getchar();}return f?-x:x;
}
char cr[200];int tt;
inline void print(register int x,register char k='\n') {if(!x) putchar('0');if(x < 0) putchar('-'),x=-x;while(x) cr[++tt]=x%10+'0',x/=10;while(tt) putchar(cr[tt--]);putchar(k);
}
const int maxn=233333;
const int lim=100000;
struct edge{int from,to,nxt,lg;
}e[maxn<<1];
vector<edge>g[maxn];
int n,m,k,f[maxn];
int h[maxn],pri[maxn];
bool vis[lim+5];
void xxs(){for(int i=2;i<=maxn;++i){if(!vis[i]) pri[++pri[0]]=i;for(int j=1;j<=pri[0]&&pri[j]*i<=lim;j++){vis[pri[j]*i]=1;if(i%pri[j]==0){break;}}}
}
void work(int u,int v,int w,int l){int res1=1,res2=1;for(int i=1;pri[i]*pri[i]<=w;i++) {int tmp=0;while(w%pri[i]==0){tmp++;w/=pri[i];}if(tmp%k){for(int j=1;j<=tmp%k;j++){res1*=pri[i];}for(int j=1;j<=k-tmp%k;j++){if(res2*pri[i]>lim){return;}res2*=pri[i];}}}if(k!=1)res1*=w;for(int j=2;j<=k;j++){if(res2*w>lim){return;}res2*=w;}f[res1]=res2;f[res2]=res1;g[res1].push_back((edge){u,v,0,l});
}
queue<int> q;
int dp[maxn];
int cnt=1;
void add(int x,int y,int z) {e[++cnt].nxt=h[x];e[cnt].to=y;e[cnt].lg=z;h[x]=cnt;return;
}
int in[maxn],ans;
void topo(int w){while(!q.empty())q.pop();for(edge v:g[w]){in[v.to+n]++;add(v.from,v.to+n,v.lg);}for(edge v:g[f[w]]){in[v.to]++;add(v.from+n,v.to,v.lg);}for(edge v:g[w]){if(!in[v.from]) q.push(v.from),in[v.from]=999999999;}for(edge v:g[f[w]]){if(!in[v.from+n]) q.push(v.from+n),in[v.from+n]=999999999;}while(!q.empty()){int u=q.front();q.pop();for(int i=h[u];i;i=e[i].nxt){int v=e[i].to,l=e[i].lg;dp[v]=max(dp[v],dp[u]+l);ans=max(ans,dp[v]);in[v]--;if(!in[v]) q.push(v);}}for(edge v:g[f[w]]){dp[v.from]=dp[v.from+n]=dp[v.to]=dp[v.to+n]=0;h[v.from]=h[v.from+n]=h[v.to]=h[v.to+n]=0;in[v.from]=in[v.from+n]=in[v.to]=in[v.to+n]=0;}for(edge v:g[w]){dp[v.from]=dp[v.from+n]=dp[v.to]=dp[v.to+n]=0;h[v.from]=h[v.from+n]=h[v.to]=h[v.to+n]=0;in[v.from]=in[v.from+n]=in[v.to]=in[v.to+n]=0;}cnt=1;
}
signed main(){n=read();m=read();k=read();memset(f,-1,sizeof(f));xxs();f[0]=0;for(int i=1;i<=m;++i){int u=read(),v=read(),w=read(),l=read();ans=max(ans,l);work(u,v,w,l);}for(int i=1;i<=lim;i++){if(f[i]>=0 && f[i]>=i){topo(i);}}print(ans);return 0;
}

D Resurrection

题解

我也没看懂。。。.。

Mdoi R2 洛谷4月月赛I相关推荐

  1. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  2. 洛谷10月月赛 2 t2 深海少女与胖头鱼

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

  3. 洛谷 2 月月赛 I 『MdOI R4』 (Div2) A ~ D 四题全,也许会有六题,超高质量题解 (Div.1E、F下辈子一定补)【每日亿题2 / 9】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.P7337 『MdOI R4』Fun B.P7338 『MdOI R4』Color C.P7 ...

  4. 洛谷11月月赛(284pts rank85)

    https://www.luogu.org/contestnew/show/12006 我是比赛完后在去写的 这是我第一次打洛谷月赛,之前一次是比赛完才去看而且写了第一题就没写后面的了 284分,太水 ...

  5. P8318 『JROI-4』淘气的猴子(【LGR-108】洛谷 5 月月赛 I JROI R4 Div.2)

    众所周知,jockbutt 是一个可爱的女孩纸. 题目描述 jockbutt 有一个正整数序列,长度为 n,分别为 a1,a2...an,她非常喜欢这个序列,平时都非常爱惜它们. 可是有一天,当 jo ...

  6. 【洛谷月赛】洛谷11月月赛·Day1

    洛谷2614 计算器弹琴 本题地址: http://www.luogu.org/problem/show?pid=2614 题目描述 总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文.(参 ...

  7. CONTEST199 [有奖]洛谷8月月赛题解

    http://www.luogu.org/contest/show?tid=199 T1: 集合求和 可以找一下规律,对于一个包含n个元素的集合,每个元素在所有子集中出现的次数均为2^(n-1),将s ...

  8. 洛谷10月月赛Round.1| P3399 丝绸之路 [DP]

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  9. 洛谷2017-2月月赛

    打CF前随便打打,看了一眼只会做签到题,还挂了一次,95/400. A.富金森林公园 题目大意:给一个长度为n的数列,支持两种操作:1.修改一个数的值:2.给出一个k,问有多少段数大等于k.(N< ...

最新文章

  1. HTTP Status 405 - HTTP method POST is not supported by this URL
  2. MWeb 的基本使用
  3. 高人写的浙大简史(转)
  4. martingale、markov chain、Monte Carlo、MCMC
  5. 魔兽世界客户端数据研究(三)
  6. Hadoop Jobhistory配置启用
  7. mysql图片_往MySQL中存储图片的方法
  8. socket结构和几个IP地址转换函数
  9. python矩阵赋值提高速度_Numpy大规模矩阵运算优化加速技巧
  10. maven配置aliyun仓库地址
  11. DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
  12. codevs 1422 河城荷取
  13. Spring Boot实战笔记(一)-- Spring简介
  14. linux shell脚本 定义变量,Shell脚本应用 - 编制shell脚本、shell变量
  15. dedecms注入漏洞 5.3 5.5
  16. 《鸟哥的Linux私房菜》学习笔记(8)——bash脚本编程之变量
  17. ​SQL注入非常详细总结
  18. 论文关于mysql数据库文献_数据库论文参考文献
  19. css样式,鼠标移动上去变成禁用、小手等样式。
  20. 加拿大程序员趣闻系列 1_N,kotlin循环

热门文章

  1. Thumbnails生成缩略图透明底图变黑bug修改
  2. 根据ppt模板修改ppt内容
  3. 在线JS代码调试网站简介 JSFiddle JSBin JSRUN
  4. VS2015许可证过期
  5. Ubuntu20安装erlang和rabbitmq
  6. 工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA
  7. iOS之 2020年最新苹果移动设备屏幕的大小和系统
  8. 微信小程序实现视频上下滑动
  9. 如何判断网站是不是ipad访问的?三种方法来判断
  10. 测试工程师面试题mysql_测试工程师sql笔试题都在这里了!