CF338(div2)
A. Bulbs
题目描述:
就是有m盏灯,有n个开关,一开始灯都是关的,然后按下一个开关后就会使某些灯打开,然后打开的灯不会再次熄灭。问能否是所有的灯打开。
解答:
简单的遍历一下,然后看是否存在有灯不受开关控制。
#include <iostream>
using namespace std;int num[105], n, m;void solve()
{int cnt = 0;for(int i = 0; i < m; i ++) num[i] = 0;int geshu, val;for(int i = 0; i < n; i ++){cin>>geshu;for(int j = 0; j < geshu; j ++){cin>>val;if(num[val -= 1] == 0)cnt ++;num[val] = 1;}}cout<< ((cnt == m) ? "YES" : "NO") <<endl;
}int main()
{while(cin>>n>>m){solve();}
}
B. Longtail Hedgehog
题目描述:
就是可以用别画个dog,然后每个点有一个数字,然后告诉你m对连接的数字,dog由脊柱和尾巴构成,脊柱为数字,只能从小到大构成脊柱,尾巴可以为多条,长度为1。现在定义一个值,该值是由尾巴的条数乘以脊柱的长度的积得到,现在要求这个值的最大值。
解答:
因为脊柱数字时从小到大的,那么在求解脊柱长度时,可以得到五环有向图,然后针对有向图求度数,运用DAG+dp可以得到每个点的深度的最大值,即脊柱的最大值,然后根据无向图的该点边的个数,可以得到尾巴长度。然后遍历一下求最大值即可。
#include <iostream>
#include <queue>
#include <cmath>
#include <cstdio>
using namespace std;int n, m, dree[100005], dushu[100005];
vector<int> G[100005];
bool isVisit[100005];void solve()
{fill(dree, dree + n, 0);fill(dushu, dushu + n, 0);for(int i = 0; i < n; i ++) G[i].clear();int u, v;for(int i = 0; i < m; i ++){cin>>u>>v;u -= 1, v -= 1;if(u > v) swap(u, v);G[u].push_back(v);G[v].push_back(u);dushu[v] ++;}queue<int> q;for(int i = 0; i < n; i ++){if(dushu[i] == 0){dree[i] = 1;q.push(i);}}while(!q.empty()){int t = q.front();q.pop();int len = G[t].size();for(int i = 0; i < len; i ++){if(G[t][i] < t) continue;dree[G[t][i]] = max(dree[G[t][i]], dree[t] + 1);dushu[G[t][i]] --;if(dushu[G[t][i]] == 0) q.push(G[t][i]);}}fill(isVisit, isVisit + n, false);__int64 ans = 0;for(int i = 0; i < n; i ++){ans = max(ans, 1LL * G[i].size() * dree[i]);}cout<<ans<<endl;
}int main()
{while(cin>>n>>m){solve();}
}
C. Running Track
题目描述:
就是有两个字符串s,t。然后t可以分成很多子串,这些子串必须出现在s中,或者s的翻转串中,问分成子串个数最少的方案。
解答:
题目数据量不大字符串的长度为2100,所以运用最大匹配的方法,例如t的前i个字符能在s或者f反s中找到,且前i+1个不能在二者中找到,那么这前i个字符就是子串之一,一直这样进行下去。查找时,使用KMP,时间复杂度为O(n^2)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;int Next[2105];void getNext(char *s)
{int len = strlen(s);fill(Next, Next + len, -1);int i = 0, j = -1;while(i < len){if(j == -1 || s[i] == s[j]){i ++, j ++;if(i >= len) break;if(s[i] != s[j]) Next[i] = j;else Next[i] = Next[j];}else j = Next[j];}
}int Kmp(char *s1, char *s2)
{int len1 = strlen(s1), len2 = strlen(s2), i = 0, j = 0, st = 0;while(i < len1){if(j != -1 && s1[i] == s2[j]){i ++, j ++;if(j >= len2) return i - strlen(s2);}else j = Next[j];if(j == -1){i ++;st = i;j = 0;}}return -1;
}char s1[2103], s2[2103], s3[2103], s4[2103];
int cnt, st[2103], et[2103];void solve()
{int len1 = strlen(s1), len2 = strlen(s2);for(int i = 0; i <= len2 / 2; i ++)s3[i] = s2[len2 - i - 1], s3[len2 - i - 1] = s2[i];s3[len2] = 0;cnt = 0;int curSt = 0;int ans1, ans2;s4[0] = 0;for(int i = 0; i < len1; i ++){if(curSt == i){s4[0] = s1[i];s4[1] = 0;}else{int len = strlen(s4);s4[len] = s1[i];s4[len + 1] = 0;}getNext(s4); int t = Kmp(s2, s4);if(t == -1){t = Kmp(s3, s4);if(t == -1){if(curSt == i){cout<<"-1"<<endl;return;}else{st[cnt] = ans1;et[cnt] = ans2;cnt ++, curSt = i;i --;}}else{ans1 = len2 - 1 - t;ans2 = len2 - 1 - (t + i - curSt);}}else{ans1 = t;ans2 = t + i - curSt;}}st[cnt] = ans1;et[cnt] = ans2;cout<<cnt + 1<<endl;for(int i = 0; i <= cnt; i ++)cout<<st[i] + 1<<" "<<et[i] + 1<<endl;
}int main()
{while(cin>>s2>>s1){solve();}
}
D. Multipliers
题目描述:
就是告诉你一个数可以有p1p2....pm个数相乘得到,且每个pi都是素数。现在要求该数所有因子的乘积,最后结果Mod(10^9 + 7)。
解答:
题目的意思很好理解,假设对p进行排序合并之后,可以得到该数如下表示
对于p的贡献进行分析,所有因子中含有p,且除以p之后不能被p整除的个数为(b + 1)(c + 1)个,对于含有p^2的因子个数也是这么多个,所以对于p的贡献积为
对于q,r同理可得,最后的表达式为:
根据上面的式子进行求解即可,注意一些小细节的处理
#include <iostream>
#include <algorithm>
using namespace std;__int64 num[200005], ans;
int cnt[200005];
int m;const int Mod = 1000000007;void powV(__int64 temp, int n)
{while(n){if(n & 1)ans = (ans * temp) % Mod;temp = temp * temp % Mod;n >>= 1;}
}__int64 powVV(__int64 temp, int n)
{__int64 aannss = 1;while(n){if(n & 1)aannss = (aannss * temp) % Mod;temp = temp * temp % Mod;n >>= 1;}return aannss;
}void solve()
{for(int i = 0; i < m; i ++) cin>>num[i];sort(num, num + m);int len = m;bool isAllEven = true;cnt[0] = 1;for(int i = 1, j = 0; i < m; i ++){if(num[i] != num[j]){if(cnt[j] % 2) isAllEven = false; j ++;num[j] = num[i];cnt[j] = 1;}else{cnt[j] ++;len --;}}if(cnt[len - 1] % 2) isAllEven = false;ans = 1;for(int i = 0; i < len; i ++)powV(num[i], isAllEven ? cnt[i] / 2 : cnt[i]);for(int i = 0; i < len; i ++){if(!isAllEven && cnt[i] % 2){ans = powVV(ans, (cnt[i] + 1) / 2);isAllEven = true;}elseans = powVV(ans, (cnt[i] + 1));}cout<<ans<<endl;
}int main()
{while(cin>>m){solve();}
}
E. Hexagons
找规律题,以后再补吧,也有可能 不补。
CF338(div2)相关推荐
- 2020 GDUT Rating Contest III (Div2)
2020 GDUT Rating Contest III (Div2) A Wormhole Sort 题意: 给出N个打乱顺序的数,和M条边(a,b,c)表示在a位置的数可以和在b位置的数交换,这条 ...
- 【Codeforces Round #614(div2)】E-Xenon's Attack on the Gangs(树形dp)
一.题目链接 https://codeforces.com/contest/1293/problem/E 二.题意 给n个结点,n-1条无向边.即一棵树.我们需要给这n-1条边赋上0~n-2不重复的值 ...
- CF #738(div2)B. Mocha and Red and Blue(构造)
problem B. Mocha and Red and Blue time limit per test1 second memory limit per test256 megabytes inp ...
- CF #737(div2)C. Moamen and XOR 与和异或-找规律
题意 : 给 n 和 k (<2e5),保证每个数ai < 2^k,问使得
- CF #737(div2)B. Moamen and k-subarrays 贪心
题意 : 给一个长为 n 的序列(distinct),将其分为 <= k 个连续的序列,对这些段任意组合,求能否得到递增序列. 思路 : 记录在原序列中每个distinct的位置,然后在结果序列 ...
- CF #737(div2) Ezzat and Two Subsequences 找规律
题意 : 给一个长为 n 的序列,将其分为两个序列,定义f(x)为两个新序列的平均值之和,求f(x)的最大值. 思路 : 将最大的单独放在一个序列,剩余的在另一个序列. #include <io ...
- Orac and LCM #641(div2) c题--求质因数次小指数
Orac and LCM cf地址 For the multiset of positive integers s={s1,s2,-,sk}, define the Greatest Common D ...
- CF 183(div2)
B.直接一天天加上去. #include <cstdio> #include <cstring> #include <iostream> #include < ...
- CF#333(Div2) C. The Two Routes(最短路)
题目点我点我点我 C. The Two Routes time limit per test 2 seconds memory limit per test 256 megabytes input s ...
最新文章
- 201403-4 无线网络
- HTML输入 - 名称与ID
- 我们如何从VC++开始“编程”?
- 石子合并(GarsiaWachs算法)
- [SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole
- 通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值
- 不要假装努力,结果不会陪你演戏!
- 全局唯一递增的id_生成全局唯一id的几种方式
- docker清理磁盘占用
- 【蓝桥杯单片机】数码管
- b5对战一直检索服务器信息,【B5平台】求解封,服务器问题啊
- 【C语言】简单小游戏项目:《别踩白块儿》
- 黑苹果系统发热与续航
- 三星专用计算机软件,三星PC套件Kies软件
- 电脑浏览器连接不上网络,微信都有网络
- Linux命令之ss命令
- swiper——AutoPlay
- 高德地图上线新能源导航 一站式充电服务缓解里程焦虑
- javaScript改变this指向的三种方法
- 软件设计到底是什么?
热门文章
- JavaSwing+mysql的图书管理系统设计实现
- 关于青春的电影有哪些
- Unraid下虚拟DSM7.1,并开启相册人脸识别
- 【性能评估】ROC曲线
- Linux 自带的 LED 灯驱动
- web服务验证事件合法请求,使用到了__VIEWSTATE、__EVENTVALIDATION、cookie来验证
- confluence草稿机制原理
- 无线网网速太慢如何设置服务器,苹果手机网速慢怎么办 iphone手机配置DNS提升网速方法...
- moment函数转换后的时间不正确,带有 “sa“等奇怪的字母
- 汇编总结:lea指令