喵哈哈村的魔法考试 Round #7 (Div.2)

注意!后四道题来自于周日的hihocoder offer收割赛第九场。

我建了个群:欢迎加入qscoj交流群,群号码:540667432

大概作为该oj的讨论吧,未来应该会上线一个bbs的。

喵哈哈村的七十六

签到题,直接for一遍判断就好了嘛

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,a;
  4. int main(){
  5. while(cin>>n>>a){
  6. int ans = 0;
  7. for(int i=0;i<n;i++){
  8. int b,c;
  9. cin>>b>>c;
  10. if(a>=b)ans=max(ans,c);
  11. }
  12. cout<<ans<<endl;
  13. }
  14. }

喵哈哈村的麦克雷

对于这道题,你需要知道bfs。

把0压进队列里面,然后BFS就行了。

bfs找到的,就一定是最近的路。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 805;
  4. string s[maxn];
  5. int mp[maxn][maxn];
  6. int dx[4]={1,-1,0,0};
  7. int dy[4]={0,0,1,-1};
  8. int n,m;
  9. int main(){
  10. while(scanf("%d%d",&n,&m)!=EOF){
  11. memset(mp,-1,sizeof(mp));
  12. for(int i=0;i<n;i++)
  13. cin>>s[i];
  14. queue<int> QX,QY;
  15. for(int i=0;i<n;i++){
  16. for(int j=0;j<m;j++){
  17. if(s[i][j]=='0'){
  18. mp[i][j]=0;
  19. QX.push(i);
  20. QY.push(j);
  21. }
  22. }
  23. }
  24. while(!QX.empty()){
  25. int nx = QX.front();
  26. int ny = QY.front();
  27. QX.pop();
  28. QY.pop();
  29. for(int i=0;i<4;i++){
  30. int nex=nx+dx[i];
  31. int ney=ny+dy[i];
  32. if(nex<0||nex>=n)continue;
  33. if(ney<0||ney>=m)continue;
  34. if(mp[nex][ney]!=-1)continue;
  35. mp[nex][ney]=mp[nx][ny]+1;
  36. QX.push(nex);
  37. QY.push(ney);
  38. }
  39. }
  40. for(int i=0;i<n;i++){
  41. for(int j=0;j<m;j++){
  42. cout<<mp[i][j]<<" ";
  43. }
  44. cout<<endl;
  45. }
  46. }
  47. }

喵哈哈村的Dva

这道题实际上是模拟题,考虑的情况有点多。

我这里给一个我的做法:

手写一个cal()函数,表示1970年到这一天需要多少秒,然后两者相减,就是中间的答案。

然后就是讨论+特判了……

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. string s1,s2,s3,s4;
  4. int YYYY1,m1,d1,h1,f1,mi1,y2,m2,d2,h2,f2,mi2;
  5. int V1[50]={1972,1973,1974,1975,1976,1977,1978,1979,1987,1989,1990,1995,1998,2005,2008,2016};//16
  6. int V2[50]={1972,1981,1982,1983,1985,1992,1993,1994,1997,2012,2015};//11
  7. int M[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  8. void gettime(){
  9. YYYY1=0,m1=0,d1=0,h1=0,f1=0,mi1=0,y2=0,m2=0,d2=0,h2=0,f2=0,mi2=0;
  10. for(int i=0;i<4;i++){
  11. YYYY1=YYYY1*10+(s1[i]-'0');
  12. y2=y2*10+(s3[i]-'0');
  13. }
  14. for(int i=5;i<7;i++){
  15. m1=m1*10+(s1[i]-'0');
  16. m2=m2*10+(s3[i]-'0');
  17. }
  18. for(int i=8;i<10;i++){
  19. d1=d1*10+(s1[i]-'0');
  20. d2=d2*10+(s3[i]-'0');
  21. }
  22. for(int i=0;i<2;i++){
  23. h1=h1*10+(s2[i]-'0');
  24. h2=h2*10+(s4[i]-'0');
  25. }
  26. for(int i=3;i<5;i++){
  27. f1=f1*10+(s2[i]-'0');
  28. f2=f2*10+(s4[i]-'0');
  29. }
  30. for(int i=6;i<8;i++){
  31. mi1=mi1*10+(s2[i]-'0');
  32. mi2=mi2*10+(s4[i]-'0');
  33. }
  34. }
  35. bool check(int p)
  36. {
  37. if(p%400==0)return 1;
  38. if(p%4==0&&p%100!=0)return 1;
  39. return 0;
  40. }
  41. int check2(int y){
  42. int tmp = 0;
  43. for(int i=0;i<16;i++)
  44. if(V1[i]==y)tmp++;
  45. for(int i=0;i<11;i++)
  46. if(V2[i]==y)tmp++;
  47. return tmp;
  48. }
  49. int check6(int y){
  50. for(int i=0;i<11;i++)
  51. if(V2[i]==y)return 1;
  52. return 0;
  53. }
  54. int check12(int y){
  55. for(int i=0;i<16;i++)
  56. if(V1[i]==y)return 1;
  57. return 0;
  58. }
  59. long long solve(int y,int m,int d,int h,int f,int mi){
  60. long long tmp = 0;
  61. for(int i=1970;i<y;i++){
  62. if(check(i))tmp+=1ll*366*24*60*60;
  63. else tmp+=1ll*365*24*60*60;
  64. tmp+=check2(i);
  65. }
  66. for(int j=0;j<m-1;j++){
  67. if(j==1&&check(y))tmp+=1ll*29*24*60*60;
  68. else tmp+=1ll*M[j]*24*60*60;
  69. if(j==5&&check6(y))tmp++;
  70. }
  71. for(int k=0;k<d-1;k++){
  72. tmp+=24*60*60;
  73. }
  74. for(int i=0;i<h;i++){
  75. tmp+=60*60;
  76. }
  77. for(int i=0;i<f;i++)
  78. tmp+=60;
  79. tmp+=mi;
  80. return tmp;
  81. }
  82. int main(){
  83. while(cin>>s1>>s2>>s3>>s4){
  84. gettime();
  85. long long ans=solve(y2,m2,d2,h2,f2,mi2)-solve(YYYY1,m1,d1,h1,f1,mi1);
  86. cout<<ans<<endl;
  87. }
  88. }

喵哈哈村的卢西奥

两种情况:

第一种情况,有两个是子树,这个东西用启发式合并/dp去维护一下当前sz[x]=all/3的个数就好了。

第二种情况,只有一个是子树,那么第二段显然是包含了第一段的,那么就存在一个的size=2all/3,一个sz=all/3的情况,统计一下就好了。

dfs处理一下就好了,具体看代码:

  1. #include <set>
  2. #include <map>
  3. #include <list>
  4. #include <queue>
  5. #include <stack>
  6. #include <cmath>
  7. #include <string>
  8. #include <cstdio>
  9. #include <vector>
  10. #include <sstream>
  11. #include <cstdlib>
  12. #include <cstring>
  13. #include <iostream>
  14. #include <algorithm>
  15. #include <string>
  16. #include <sstream>
  17. #include <iomanip>
  18. #include <iostream>
  19. #include <fstream>
  20. // #include <unordered_set>
  21. using namespace std;
  22. #define FF first
  23. #define SS second
  24. #define MP make_pair
  25. #define PB push_back
  26. #define lson rt << 1, l, mid
  27. #define rson rt << 1 | 1, mid + 1, r
  28. #define FOR(i, n, m) for(int i = n; i <= m; i++)
  29. #define REP(i, n, m) for(int i = n; i >= m; i--)
  30. #define ll long long
  31. typedef long long LL;
  32. typedef pair<int,int> PII;
  33. typedef pair<LL, LL> PLL;
  34. typedef unsigned long long ULL;
  35. /****************************define***************************************/
  36. const int mod = 1e9 + 7;
  37. const int maxn = 100010;
  38. int n;
  39. int v[maxn], sz[maxn], p[maxn];
  40. vector<int> nd[maxn];
  41. int s;
  42. int cn = 0, cn2 = 0;
  43. ll ans = 0;
  44. void Dfs_sz(int u){
  45. sz[u] += v[u];
  46. int t = nd[u].size();
  47. FOR(i, 0, t-1) {
  48. Dfs_sz(nd[u][i]);
  49. sz[u] += sz[nd[u][i]];
  50. }
  51. }
  52. void Dfs(int u){
  53. //printf("node %d. ans %d. cn %d. cn2 %d. sz %d\n", u, ans, cn, cn2, sz[u]);
  54. if(sz[u] == s/3) {
  55. ans += cn + cn2;
  56. //printf("node %d. ans %d\n", u, ans);
  57. }
  58. if(p[u] != 0 && sz[u] == s*2/3) cn2++;
  59. int t = nd[u].size();
  60. FOR(i, 0, t-1){
  61. Dfs(nd[u][i]);
  62. }
  63. if(sz[u] == s/3) cn++;
  64. if(p[u] != 0 && sz[u] == s*2/3) cn2--;
  65. }
  66. int main(){
  67. int t;
  68. cin >> t;
  69. while(t--){
  70. cn = 0, cn2 = 0;
  71. s = 0, ans = 0;
  72. FOR(i, 0, maxn-1) nd[i].clear();
  73. memset(sz, 0, sizeof(sz));
  74. int n, root=-1;
  75. cin >> n;
  76. FOR(i, 1, n) {
  77. cin >> v[i] >> p[i];
  78. s += v[i];
  79. nd[p[i]].PB(i);
  80. if(p[i] == 0) root=i;
  81. }
  82. if(s % 3 != 0) cout << 0 << endl;
  83. else{
  84. Dfs_sz(root);
  85. Dfs(root);
  86. printf("%lld\n", ans);
  87. }
  88. }
  89. return 0;
  90. }

喵哈哈村的小美

数学题,杨氏矩阵,百度钩子公式有惊喜。

如果不会的话,其实暴力打表+oeis也能做出来,一维一维的去查就好了。

大力推荐一个网站 oeis.org!!!!!!!!!

如果不知道的话,你就out了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1005;
  4. const int mod = 1e9+7;
  5. const int Maxn = 1e6+6;
  6. int mp[maxn][maxn];
  7. bool check(int n,int m){
  8. int flag = 1;
  9. for(int i=0;i<n;i++){
  10. for(int j=1;j<m;j++){
  11. if(mp[i][j]<mp[i][j-1])flag=0;
  12. }
  13. }
  14. for(int i=1;i<n;i++){
  15. for(int j=0;j<m;j++){
  16. if(mp[i][j]<mp[i-1][j])flag=0;
  17. }
  18. }
  19. return flag;
  20. }
  21. int gcd(int a, int b, int& x, int& y) {
  22. if (!a) {
  23. x = 0, y = 1;
  24. return b;
  25. }
  26. int xx, yy, g = gcd(b % a, a, xx, yy);
  27. x = yy - b / a * xx;
  28. y = xx;
  29. return g;
  30. }
  31. inline int normal(int n) {
  32. n %= mod;
  33. (n < 0) && (n += mod);
  34. return n;
  35. }
  36. inline int inv(int a) {
  37. int x, y;
  38. assert(gcd(a, mod, x, y) == 1);
  39. return normal(x);
  40. }
  41. inline int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }
  42. inline int sub(int a, int b) { return a - b < 0 ? a - b + mod : a - b; }
  43. inline int mul(int a, int b) { return int(a * 1ll * b % mod); }
  44. inline int _div(int a, int b) { return mul(a, inv(b)); }
  45. long long p[Maxn];
  46. long long solve2(long long x){
  47. //(2n)!/(n!(n+1)!)
  48. return _div(p[2*x],mul(p[x],p[x+1]));
  49. }
  50. long long solve3(long long x){
  51. //2*(3*n)!/(n!*(n+1)!*(n+2)!);
  52. return _div(mul(2,p[3*x]),mul(p[x],mul(p[x+1],p[x+2])));
  53. }
  54. int main(){
  55. p[0]=1;
  56. for(int i=1;i<Maxn;i++){
  57. p[i]=p[i-1]*i%mod;
  58. }
  59. int n,m;
  60. while(cin>>n>>m){
  61. if(n==1){
  62. cout<<"1"<<endl;
  63. }
  64. else if(n==2){
  65. cout<<solve2(m)<<endl;
  66. }else{
  67. cout<<solve3(m)<<endl;
  68. }
  69. }
  70. /*
  71. vector<int> V;
  72. for(int i=0;i<n*m;i++)
  73. V.push_back(i);
  74. int ans = 0;
  75. do{
  76. int tot = 0;
  77. for(int i=0;i<n;i++){
  78. for(int j=0;j<m;j++){
  79. mp[i][j]=V[tot++];
  80. }
  81. }
  82. if(check(n,m))ans++;
  83. }while(next_permutation(V.begin(),V.end()));
  84. cout<<solve3(m)<<endl;
  85. cout<<ans<<endl;
  86. */
  87. }

喵哈哈村的魔法考试 Round #7 (Div.2) 题解的更多相关文章

  1. 喵哈哈村的魔法考试 Round #2 (Div.2) 题解

    喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...

  2. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

  3. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  4. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  5. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解

    喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...

  6. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

    有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...

  7. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

  8. 喵哈哈村的魔法考试 Round #18 (Div.2) 题解

    喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...

  9. 喵哈哈村的魔法考试 Round #13 (Div.2) 题解

    喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...

随机推荐

  1. Java 在匿名内部函数中为外部函数变量赋值的解决方案

    Java匿名内部函数本人不怎么主动使用,但是经常会调用一些API,其中会调用一些接口,而这些接口是需要使用匿名内部类来实现的,于是就遇到了一些问题. 就比如okHttp3 的接口调用 OkHttpCl ...

  2. bzoj千题计划208:bzoj3174: [Tjoi2013]拯救小矮人

    http://www.lydsy.com/JudgeOnline/problem.php?id=3174 按a+b从小到大排序,a+b小的在上面,先考虑让它逃出去 正确性不会证 感性理解一下,最后一个 ...

  3. Spring RedisTemplate操作-通道操作(10)

    @Autowired @Resource(name = "redisTemplate") private RedisTemplate<String, String> r ...

  4. [iOS]@synthesize和@dynamic关键字

    首先讲@property, 这是iOS6以后出来的关键词. 用它声明一个属性之后, 编译器会自动给你生成setter和getter方法的声明以及实现还有一个以_xxx 的成员变量(xxx是你属性定义的 ...

  5. Maven 环境的配置

    Maven 环境的配置 现在Java新架构的不断出现,例如Struts,Spring,Hibernate等,项目的配置文件的增多,给开发人员带来很大麻烦.在实际的开发当中,Myeclipse中的pro ...

  6. HDU 4506 小明系列故事——师兄帮帮忙(二分快速幂)

    题意:就是输入一个数组,这个数组在不断滚动,而且每滚动一次后都要乘以一个数,用公式来说就是a[i] = a[i-1] * k;然后最后一位的滚动到第一位去. 解题报告:因为题目中的k要乘很多次,达到了 ...

  7. PyQT5 No module named ‘PyQt5.QtWebEngineWidgets’

    PyQT5查找不到模块QtWebEngineWidgets pip install pyqt5==5.10.1 或 安装64位的Pyhon解释器

  8. mac lsof使用查看端口

    安装 brew install lsof 在Mac OS系统中,无法使用netstat来查看端口占用情况,可以使用lsof来代替,这种方式在Linux下也适用. sudo lsof -nP -iTCP ...

  9. scrapy主动触发关闭爬虫

    在spider中时在方法里直接写 self.crawler.engine.close_spider(self, 'cookie失效关闭爬虫')   在pipeline和downloaderMiddle ...

  10. react-router 4 路由的嵌套

    1.在component组件内部需要嵌套的位置直接嵌套Route标签 这个方法会使得路由标签比较分散,子组件我们必须直接将Route标签写入到父组件之中,而且路由必须包含根路径. // Dashboa ...