• XJOI奋斗群蒻蒟群群赛17 RANK排名9

    • T1Increasing SequenceTLE一次AC

      • 题意
      • 分析过程
      • 给出题解
    • T2Jumping JackWA一次后AC
      • 题意
      • 分析过程
      • 给出题解
    • T3How Many Squares 已AC
      • 题意
      • 分析过程
      • 给出题解
    • T4A Simple TaskWA两次之后AC
      • 题意
      • 分析过程
      • 给出题解
    • T5
      • 题意
      • 分析过程
      • 给出题解

—>XJOI奋斗群(蒻蒟群)群赛17<— RANK排名9

T1:Increasing Sequence(TLE一次AC)

题意:

给你一个数列,然后给出你一个数d,数列中的每个数都可以加上d,问你最少加上几次d,能够使这个数列变成一个增序序列。

分析过程:

只要每碰到一个数比前一个数小,就加上一定的值直到大于前一个数,最后输出次数就行了。

给出题解:
#include<bits/stdc++.h>
using namespace std;int main()
{int n,d;int a[5000];scanf("%d%d",&n,&d);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}long long  cnt=0;for(int i=2;i<=n;i++){if(a[i]<=a[i-1]){int dif=a[i-1]-a[i];dif/=d;dif++;a[i]+=d*dif;cnt+=dif;}else continue;}printf("%d\n",cnt);return 0;
}

T2:Jumping Jack(WA一次后AC)

题意:

一个人在练习跳跃,第一次只能跳一个单位,之后每一次跳就能够比前一次长一个单位,问你经过多少次跳跃之后能够准确地到达x这个位置。

分析过程:

由于x的值可能是正的也可能是负的,所以要先把x取绝对值。先预估sqrt(2*x)的值作为cnt的预估值,然后再从这个值开始向答案推进。

给出题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{int x;scanf("%d",&x);x=abs(x);int cnt=sqrt(2*x);while(cnt*(cnt+1)/2<x||(cnt*(cnt+1)/2-x)&1)cnt++;printf("%d\n",cnt);return 0;
}

T3:How Many Squares? (已AC)

题意:

给你一个矩阵,问你其中有几个正方形,要求正方形旁边不能有多与的边。

分析过程:

先便利每个数组中的

给出题解:
#include<bits/stdc++.h>
using namespace std;
int dic[8][2]= {{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
char a[255][255];
int len=0;
int n,m;void judge(int x,int y)
{if(x<0||x>=n||y<0||y>=m||a[x][y]!='1')return ;a[x][y]='2';len++;for(int i=0; i<8; i++){judge(x+dic[i][0],y+dic[i][1]);}
}bool solve(int x,int y,int len,int l,int r)
{for(int i=0; i<len+1; i++)for(int j=l; j<r; j++){if(x+dic[j][0]*i<0||x+dic[j][0]*i>=n||y+dic[j][1]*i<0||y+dic[j][1]*i>=m||a[x+dic[j][0]*i][y+dic[j][1]*i]!='2')return 0;}return 1;
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=0; i<n; i++)scanf("%s",a[i]);int res=0;for(int i=0; i<n; i++)for(int j=0; j<m; j++){if(a[i][j]=='1'){len=0;judge(i,j);if(len%4)continue;res+=solve(i,j,len/4,0,2)&&solve(i+len/4,j+len/4,len/4,2,4);res+=solve(i,j,len/4,4,6)&&solve(i+len/2,j,len/4,6,8);}}printf("%d\n",res);}return 0;
}

T4:A Simple Task(WA两次之后AC)

题意:

给你一个简单的无向图,让你统计其中环的个数。

分析过程:

我们设计一个状态{[s][SET][i]}来记录起点s到终点i的简单路径的条数,其中SET表示经过的节点的集合。但由于圆排列的性质,这样的状态是有重复的。我们通过指定起点为SET中的最小序号点来消除圆排列带来的重复,状态变为{[SET][i]}。还要注意,即使这样定义状态,计算简单环个数的时候仍会将2个节点一条单边的情况当成环,也会将长度大于2的环正向计算一遍,反向计算一遍。所以我们还要进行后处理。

前向的状态转移方程可以写作:
dp[SET][j]=∑(i∈SET,i−j)dp[SET][i]
但这样的方程并不利于统计简单环的个数。

后向的状态转移方程可以写作:
设简单环的个数用统计量cnt表示。对于dp[SET][i]状态,i的每一条边eij,j∈neighbor(i):若j∈SET则说明遇到了环,dp[SET][i]贡献给cnt;若j∉SET则说明获得一条简单路径,dp[SET][i]贡献给dp[SET′][j]。

后处理:
由于长度为2的简单环被统计了进去,所以cnt−m;又由于长度大于2的简单环被统计了2遍,所以(cnt−m)/2。
最后要注意环的个数可能会达到19!个,所以我们需要用int64(之前被这个卡了好久)。

给出题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;ll n,m,ans,tot;
ll tmap[20][20],f[1<<19][19];ll get_p(int a)
{for(int i=0; i<n; i++){if(a&(1<<i)) return i;}
}
ll solve()
{ll i,j,k,p,s;ans=0;tot=(1<<n)-1;memset(f,0,sizeof f);for(i=0; i<n; i++){
//      printf("%d %d\n",1<<i,i);f[1<<i][i]=1;}for(i=1; i<=tot; i++){for(j=0; j<n; j++){if(f[i][j]==0) continue ;p=get_p(i);for(k=p; k<n; k++){if(j==k) continue ;if(tmap[j][k]==0)continue;if(i&(1<<k)){if(k==p) ans+=f[i][j];}else{s=i|(1<<k);f[s][k]+=f[i][j];}}}}ans-=m;ans/=2;return ans;
}
int main()
{scanf("%I64d%I64d",&n,&m);memset(tmap,0,sizeof tmap);ll u,v;for(int i=1; i<=m; i++){scanf("%I64d%I64d",&u,&v);tmap[u-1][v-1]=tmap[v-1][u-1]=1;}ll res=solve();printf("%I64d\n",res);return 0;
}
}

T5:

题意:
分析过程:
给出题解:

czl蒻蒟的OI之路16相关推荐

  1. czl蒻蒟的OI之路14、15

    XJOI奋斗群蒻蒟群群赛15 RANK排名9 T1Fashion in Berland 已AC 题意 分析过程 给出题解 T2s-palindrome WA四次后AC 题意 分析过程 给出题解 T3E ...

  2. czl蒻蒟的OI之路

    XJOI奋斗群蒻蒟群群赛2 RANK排名3 T1Odds and Ends 已AC 题意 分析过程 给出题解 T2Tell Your World 已AC 题意 分析过程 给出题解 T3From Y t ...

  3. czl蒻蒟的OI之路8

    XJOI奋斗群蒻蒟群群赛9 RANK排名12 T1SnacktowerWA三次后AC 题意 分析过程 给出题解 T2The QueueWA六次后AC 题意 分析过程 给出题解 T3GarlandWA一 ...

  4. czl蒻蒟的OI之路9

    XJOI奋斗群蒻蒟群群赛10 RANK排名7 T1Chess TourneyWA一次后AC 题意 分析过程 给出题解 T2Luba And The TicketWA两次后AC 题意 分析过程 给出题解 ...

  5. czl蒻蒟的OI之路13

    XJOI奋斗群蒻蒟群群赛10 RANK排名6 T1Compote 已AC 题意 分析过程 给出题解 T2Decoding已AC 题意 分析过程 给出题解 T3Tram已AC 题意 分析过程 给出题解 ...

  6. czl蒻蒟的OI之路10、11、12

    好久没有发微博了表示自己也很绝望啊今天来个三连击 XJOI奋斗群蒻蒟群群赛11 RANK排名11 T1The Wall WA一次后AC 题意 分析过程 给出题解 T2Maximal Area Quad ...

  7. czl蒻蒟的OI之路5

    XJOI奋斗群蒻蒟群群赛6 RANK排名10 T1Fraction已AC 题意 分析过程 给出题解 T2Maxim Buys an Apartment WA两次AC 题意 分析过程 给出题解 T3Pl ...

  8. czl蒻蒟的OI之路3

    XJOI奋斗群蒻蒟群群赛4 RANK排名3 T1Arpa and a research in Mexican wave WA一次后AC 题意 分析过程 给出题解 T2Arpa and an exam ...

  9. czl蒻蒟的OI之路7

    XJOI奋斗群蒻蒟群群赛8 RANK排名 T1k-Factorization RE一次后AC 题意 分析过程 给出题解 T2Odd sumWA一次后AC 题意 分析过程 给出题解 T3Minimal ...

最新文章

  1. 结构体内字节手动对齐(#pragam pack)
  2. Tactai获美国科学基金会100万美元投资,致力于打造VR触觉体验
  3. 经典C语言程序100例之二
  4. 2、JAVA开发环境的搭建
  5. Android开发学习总结——appcompat_v7项目说明
  6. Python(初学者):调用函数输出
  7. 研究称在家中工作可提高员工工作效率
  8. mysql插入数据不成功_mysql插入数据失败原因分析
  9. 使用逆火日志分析器简单分析日志
  10. python3数据分析面试题--找出出现次数最多的名字并统计次数
  11. 揭秘微信新骗局:微信扫码进群付费暗雷源码 诱导支付百倍暗雷程序-如何判刑,如何举报?
  12. BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型
  13. Windows 10如何找回显示桌面图标,一键快速回到桌面
  14. 最全解决方法:未解压的word文档修改保存后找不到
  15. [ 7天学习Python编程,第一天]-----1.4 Python main函数:了解__main__【python舵手】
  16. Android 9.0 蓝牙扫描流程
  17. 计算机课学生段密码,在线学习平台学生端常见问题
  18. 记账系统推荐金蝶精斗云_金蝶精斗云和用友T+财务软件哪个好用?实用?各自优缺点是什么...
  19. 【兼容性测试】21个兼容性测试需要注意的测试点
  20. 规则引擎 开源产品_开源公司产品经理的规则

热门文章

  1. 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)
  2. Gvim中实现特定行文本的替换
  3. java-Map接口
  4. 【CSS】CSS 层叠样式表 ② ( CSS 引入方式 - 内嵌样式 )
  5. 华为鸿蒙是安卓9,鸿蒙“翻车”了?网友发现全新的鸿蒙系统居然是安卓9.0,华为骗我们?...
  6. qcc 蓝牙耳机 TWS与TWS plus的区别
  7. 数据报表多种序号生成方式
  8. 三、外码、关系的完整性约束、关系代数
  9. QT做的小游戏,技术成长ing(莫名押韵_dog)
  10. 塔顶分凝器全凝器区别_(单选)在相同的回流比和塔顶蒸汽组成下,采用分凝器+全凝器的二元连续精馏塔与仅采用全凝器的塔相比,()...