Codeforces Round #361(div 2)

A题题目意思很简单,问一种拨号的方式(拨号手势)是不是能拨出唯一的号码(例如253就不是唯一的,因为586也是可以的)

记录电话上每个格子上下左右是否还有格子,一个拨号手势是唯一的当且仅当,所拨号码的所有格子在同一个方向不同时有格子相邻。

那么直接mark,判断一下即可:

#include <cstdio>
using namespace std;
char s[10000];
int n,U,D,L,R;
int main(){scanf("%d %s",&n,s);for(int i=0;i<n;i++){if(s[i]=='0')D=L=R=1;if(s[i]=='1'||s[i]=='4'||s[i]=='7')L=1;if(s[i]=='3'||s[i]=='6'||s[i]=='9')R=1;if(s[i]=='1'||s[i]=='2'||s[i]=='3')U=1;if(s[i]=='7'||s[i]=='9')D=1;}if(L&&R&&U&&D)puts("YES");else puts("NO");return 0;
}

B题的意思是城市之间两两可以互达,耗时为两者编号的差值,同时也有一些捷径,可以用1单位时间的代价从a到b,问从1到每个点的最短耗时。

嘛,如果想把两两之间路都建出来再跑最短路,就会发现内存不开心了,由于很多路是等价的关系,所以对于两两之间的耗时为编号的差值这个条件,我们只需要建立n-1条边,从i到i+1建立长度为1的边,然后加上捷径,跑一遍最短路就可以出解了。

#include <cstdio>  
#include <cstring> 
#include <queue> 
#include <utility> 
using namespace std;  
const int N=2000100;  
const int INF=~0U>>2;  
typedef pair<int,int>seg;  
priority_queue<seg,vector<seg>,greater<seg> >q;     
int d[N],head[N],u[N],v[N],w[N],nxt[N],n,m,ed=0,H,x[N],y[N]; 
bool vis[N];  
void add(int a,int b,int c){  u[++ed]=a,v[ed]=b,w[ed]=c;nxt[ed]=head[u[ed]]; head[u[ed]]=ed;     
}     
int Dijkstra(int src){  memset(vis,0,sizeof(vis));  for(int i=0;i<=n+1;i++)d[i]=INF;  d[src]=0;  q.push(make_pair(d[src],src));  while(!q.empty()){  seg now=q.top(); q.pop();  int x=now.second;  if(vis[x])continue; vis[x]=true;  for(int e=head[x];e!=-1;e=nxt[e]) if(d[v[e]]>d[x]+w[e]){  d[v[e]]=d[x]+w[e];  q.push(make_pair(d[v[e]],v[e]));  }   } 
}      
int a[200005],p[200005];
int main(){scanf("%d",&n);memset(head,-1,sizeof(head));for(int i=1;i<=n;i++){scanf("%d",a+i);}for(int i=1;i<=n;i++){add(i,i+1,1);add(i,i-1,1);if(a[i]!=i)add(i,a[i],1);}Dijkstra(1);for(int i=1;i<n;i++)printf("%d ",d[i]);printf("%d\n",d[n]);return 0;
}

C题告诉你末项不超过n,且项数为4的等比数列恰好为m个,求n的最小值

一开始想着打表找规律,看了好几项没什么头绪,于是只能预处理比值的三次方,二分n,计算等比数列的个数来判断。

#include <cstdio> 
using namespace std;
const int N=1000005;
long long a[N],n;
int check(long long x){long long s=0;for(int i=2;a[i]<=x;i++){s+=x/a[i];if(s>=n){return 1;}}return 0;
}
int main(){for(long long i=1;i<=1000000;i++)a[i]=i*i*i;scanf("%lld",&n);long long l=1,r=1e18;while(l<r){long long mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1; }long long sum=0;for(int i=2;a[i]<=l;i++)sum+=l/a[i];if(sum!=n)l=-1;printf("%lld\n",l);return 0;
}

D题题意很简单,给出a,b两个数组,求区间,使得在该区间内a的最大值和b的最小值相等,求出区间的个数。

题解:RMQ问题,打出ST表后,分治求出在固定左端点后符合条件区间的右端点的取值范围,范围的长度和就是答案。

#include <cstdio>  
#include <cstring>  
#include <algorithm> 
using namespace std;  
const int N=200010;    
int d[N][30],f[N][30],a[N],lg2[N];   
int T,n,l,r,q;  
void rmq_init(int n){  for(int i=2;i<=n;i++)lg2[i]=lg2[i/2]+1;for(int i=1;i<=n;i++)scanf("%d",&d[i][0]);for(int i=1;i<=n;i++)scanf("%d",&f[i][0]);for(int j=1;(1<<j)<=n;j++){  for(int i=1;i+(1<<j)-1<=n;i++){  d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);}  }  
} 
int rmq_max(int l,int r){int k=lg2[r-l+1];return max(d[l][k],d[r-(1<<k)+1][k]);}
int rmq_min(int l,int r){int k=lg2[r-l+1];return min(f[l][k],f[r-(1<<k)+1][k]);}
int main() {scanf("%d",&n);long long ans=0;rmq_init(n);for(int i=1;i<=n;i++){int l=i,r=n;while(l<r){int mid=(l+r+1)>>1;if(rmq_max(i,mid)>rmq_min(i,mid))r=mid-1;else l=mid;}if(rmq_max(i,l)!=rmq_min(i,l))continue;int ll=i,rr=l;while(ll<rr){int mid=(ll+rr)>>1;if(rmq_max(i,mid)<rmq_min(i,mid))ll=mid+1;else rr=mid;}ans+=l-ll+1;}printf("%lld\n",ans);
}

E题给出了n个区间,求k个不同区间相交得到的区间长度和。

拆分成左右端点分段计算(方法巧妙,具体实现看代码)

#include <cstdio>
#include <vector>
#include <algorithm>
#include <iostream> 
using namespace std;
typedef long long LL;
const int N=200005;
const int mod=1000000007;
LL f[N],rf[N];
int l[N],r[N],m,n,k;
LL inv(int a,int m){return(a==1?1:inv(m%a,m)*(m-m/a)%m);} 
LL C(int n,int m){if(n<m||m<0)return 0;return f[n]*rf[m]%mod*rf[n-m]%mod;}
void init(){f[0]=1LL;for(int i=1;i<=200000;i++)f[i]=(LL)f[i-1]*i%mod;rf[200000]=inv(f[200000],mod);for(int i=200000;i;i--)rf[i-1]=(LL)rf[i]*i%mod;
}
int main(){init();scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)scanf("%d%d",&l[i],&r[i]);vector<pair<int,int> >V; V.clear();for(int i=1;i<=n;i++){V.push_back(make_pair(l[i]-1,1));V.push_back(make_pair(r[i],-1));}sort(V.begin(),V.end());long long ans=0;int cnt=0,pre;for(int i=0;i<V.size();i++){ans=(ans+C(cnt,k)*(V[i].first-pre))%mod;pre=V[i].first;cnt+=V[i].second;}printf("%lld\n",ans);return 0;
}

注意组合数返回0的情况,WA了好多次,谨记谨记。

 

转载于:https://www.cnblogs.com/forever97/p/Codeforces361.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java货物进销管理系统_java实验 货物进销管理系统

实验二货物进销管理系统一&#xff0e;实验目的1&#xff0e;掌握Java中文件的读写操作。2&#xff0e;学会使用Java提供的实用类(Vector, ArrayList)来完成特定的功能。3&#xff0e;掌握字符串类(String, StringBuffer)的使用。4&#xff0e;掌握用面向对象的方法分析和解决复…

java forkjoin 简书_浅谈Java的Fork/Join并发框架

1. Fork/Join是什么Oracle的官方给出的定义是&#xff1a;Fork/Join框架是一个实现了ExecutorService接口的多线程处理器。它可以把一个大的任务划分为若干个小的任务并发执行&#xff0c;充分利用可用的资源&#xff0c;进而提高应用的执行效率。Fork/Join实现了ExecutorServi…

GCD API 理解 (一)

资料先行 GCD 深入理解&#xff1a;第一部分 GCD 深入理解&#xff1a;第二部分 以上两篇文章是关于GCD讲的比较好的文章&#xff0c;翻译自raywenderlich&#xff0c;该网站有很多关于iOS 开发的优秀文章。 引子 iOS 开发中有三大进阶性的技术点&#xff0c;分别是GCD、runti…

java怎么生成字母_在Java中生成字母序列

我的版本实现了Iterator并且保持一个int计数器.计数器值转换为相应的字符串&#xff1a;import com.google.common.collect.AbstractIterator;class Sequence extends AbstractIterator {private int now;private static char[] vs;static {vs new char[Z - A 1];for(char iA…

linux 的终端字体色和背景色的修改方法(二)

Linux终端下的颜色设置 2013-08-31 22:57:15分类&#xff1a; LINUX 在 ANSI 兼容终端&#xff08;例如 xterm、rxvt、konsole 等&#xff09;里&#xff0c; 可以用彩色显示文本而不仅仅是黑白。 本文示范了如何使用粗体和彩色的文字。 相信每一位Linux使用者都要面对 Bash。 …

java中的STL库_C++11 STL线程库实现一个简单的线程池

使用C11 STL线程库实现一个线程池。处理机制是抢占式的&#xff0c;即所有线程从一个队列(std::queue)中获取任务执行(计算字符串简单HASH值)&#xff0c;使用std::mutex和std::conditional_variable实现队列访问并发协调。#include #include #include #include #include #incl…

广搜 广搜 poj 3984

***求最短路径&#xff0c;然后再输出路径&#xff0c; BFS路径输出*** #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <stack> #include <queue> #include <cmath>using namespace std…

pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程

Pycharm 设置默认头的图文教程1. 设置的路径是File->settings->Editor->File and Code Templates->Python Script内容见图&#xff1a;这样新建文件的时候就会默认头如下&#xff1a;这里说明下#!/usr/bin/evn python 和 #!/usr/bin/python的区别&#xff1a;第一种…

python redis订阅_Python 学习笔记 - Redis

Redis 和Memcached类似 也是一个开源的内存存储系统&#xff0c;存储格式也是通过键值对的方式。不过和memcached比起来&#xff0c;memcached的value只支持字符串&#xff0c;而redis支持字符串&#xff0c;列表&#xff0c;集合&#xff0c;hash等等&#xff1b;这些数据类型…

egret中loadingUI的自定义

loadingUI中是加载资源&#xff0c;此时如果想自定义loadingUI界面&#xff0c;那么此刻正在加载的图片肯定不能用了。 解决方法就是使用服务器资源 直接加载服务器资源就好了 class LoadingUI extends egret.Sprite { public constructor(){ super(); this.c…

python不支持的数据类型有achar bint cfloat dlist_第1篇:Cython的数据类型(第二部分)

Cython的C指针与C一样&#xff0c;尽管指针性与变量而不是类型相关联&#xff0c;但可以在类型或变量附近声*号。%%cythoncdef int *acdef int *b但这样在变量a,b写在一行,cython编译器会发出警告的信息,因此建议每个变量单独声明%%cythoncdef int *a,*bCython中的指针的解引操…

java 调用dll 方法 postmessage实现后台模拟按键_VB实现模拟键盘及模拟鼠标(后台操作)...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼接下来来研究下模拟鼠标模拟鼠标的常数整理&#xff0c;如下&#xff1a;WM_MOUSEFIRST 0x0200 //移动鼠标时发生WM_MOUSEMOVE 0x0200 //移动鼠标时发生&#xff0c;同WM_MOUSEFIRSTWM_LBUTTONDOWN 0x0201 //按下鼠标左键WM_LBUTTO…

【micropython】用python来进行BadUSB的USB-HID测试(含无线控制)

转载请注明&#xff1a;小五义http://www.cnblogs.com/xiaowuyi QQ群&#xff1a;64770604 本文以TPYBoardv101开发板为例讲解了利用micropython进行BadUSB的usb-HID设备测试的主要方法&#xff0c;使用mt7681模块进行了一个简单的实验&#xff0c;实现了手机摇控键盘输入的测…

php返回类中方法,php如何获取类中所有的方法名

php获取类中所有的方法名的方法&#xff1a;可以利用【get_class_methods()】函数来获取&#xff0c;【get_class_methods()】函数可以返回指定类中所有的方法名&#xff0c;并且会将方法名保存到数组中。【相关学习推荐&#xff1a;php编程(视频)】php获取类所有方法名的方法&…

C#学习之向量运算符重载

//未重载运算符&#xff0c;但编译通过&#xff1b;C#不允许重载运算符‘’&#xff0c;但如果重载‘’运算符&#xff0c;编译器会自动使用‘’运算符的重载来执行‘’运算符的操作&#xff1b; //‘-’、‘*’、‘&’和‘/’等所有赋值运算都遵循此规则&#xff1b; 1、若…

如何安装php5.5,源码安装php5.5

centos6.6首先上传php-5.5.10至服务器安装依赖环境yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-d…

PHP 表单文件上传的原理,php多文件上传功能实现原理及代码

今天对多图片上传功能小小的研究了一下&#xff0c;把下面的代码整理出来&#xff0c;方便以后自己使用以及供大家交流1、upload.html页面&#xff0c;即先是input typefile的文件&#xff1a;图片上传第一张图片第二张图片第三张图片第四张图片第五张图片2、do_upload.php页面…

php的c方法,thinkphp的c方法的使用

这篇文章主要介绍了关于thinkphp的c方法的使用&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下用过thinkphp的朋友都知道&#xff0c;C()方法在整个框架中用的非常普遍&#xff0c;C方法的实现非常简单&#xff0c;但是功能非常…

Fiddler中session的请求/响应类型与图标对照表

转载于:https://www.cnblogs.com/chengchengla1990/p/5681978.html

php打印矩阵,PHP实现顺时针打印矩阵(螺旋矩阵)的方法示例

这篇文章主要介绍了PHP实现顺时针打印矩阵(螺旋矩阵)的方法,涉及PHP基于数组遍历、运算模拟打印实现螺旋矩阵功能的相关操作技巧,对PHP感兴趣的朋友可以参考下本篇文章。本文实例讲述了PHP实现顺时针打印矩阵的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;问题…