noip模拟题day1

总览(Overview)

 

题目名称

取模

等比数列

回文串

程序名

mod

sequence

palindromes

输入文件名

mod.in

sequence.in

palindromes.in

输出文件名

mod.out

sequence.out

palindromes.out

时间限制

1s

1s

2s

空间限制

128M

128M

128M

题目类型

传统题

传统题

传统题

取模(mod)

【题目描述】

有一个整数a和n个整数b_1, …, b_n。在这些数中选出若干个数并重新排列,得到c_1,…, c_r。我们想保证a mod c_1 mod c_2 mod … mod c_r=0。请你得出最小的r,也就是最少要选择多少个数字。如果无解,请输出-1.

【输入说明】

输入文件的第一行有一个正整数T,表示数据组数。

接下去有T组数据,每组数据的第一行有两个正整数n和a.

第二行有n个正整数b_1, …, b_n.

【输出说明】

一行,输出答案。

【样例输入】

2

2 9

2 7

2 9

6 7

【样例输出】

2

-1

【数据范围】

对于40%的数据,n<=8

对于100%的数据,T<=5,n<=20,1 <=a <=10^6,b_i<=10^6

暴力

#include<cstdio>
#include<algorithm>
#define inf 1e9
#define maxn 25
using namespace std;
int T,n,x,a[maxn],falg,ans;
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int cmp(int x,int y){
return x>y;
}
int Min(int x,int y){
return x<y?x:y;
}
void Dfs(int now,int num,int s){
if(num>=ans)return;
if(s==){
ans=Min(ans,num);return;
}
if(now==n+)return;
if(s>=a[now])Dfs(now+,num+,s%a[now]);
Dfs(now+,num,s);
}
int main()
{
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
T=init();
while(T--){
n=init();x=init();
ans=inf;falg=;
a[]=;int c;
for(int i=;i<=n;i++){
c=init();
if(c<=x)a[++a[]]=c;
if(c==)falg=;
}
n=a[];if(x==)falg=;
if(falg){
printf("1\n");continue;
}
sort(a+,a++n,cmp);
Dfs(,,x);
if(ans==inf)printf("-1\n");
else printf("%d\n",ans);
}
fclose(stdin);fclose(stdout);
return ;
}

等比数列(sequence)

【题目描述】

判断一个数列是否为等比数列。

等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0。

【输入说明】

输入文件的第一行有一个正整数T,表示数据组数。

接下去有T组数据,每组数据的第一行一个整数n,接下来第二行n个数非负整数Ai,表示数列。

【输出说明】

对于每一个组的每个数据输出单独一行Yes或者No。

【样例输入】

2

3

1 1 1

3

1 4 2

【样例输出】

Yes

No

【数据范围】

对于40%的数据 0<=Ai<=10^9

对于100%的数据 T<=5,n<=1000,0<=Ai<=10^100

/*读题读题 首项公比不为0 */
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int T,n,A[maxn][],a[maxn],b[maxn];
char s[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Mul(int a[maxn],int b[maxn],int c[maxn]){
for(int i=;i<=a[];i++){
for(int j=;j<=b[];j++){
c[i+j-]+=a[i]*b[j];
if(c[i+j-]>){
c[i+j]+=c[i+j-]/;
c[i+j-]%=;
}
}
int p=b[]+i-;
while(c[p+]){
p++;c[p+]+=c[p]/;c[p]%=;
}
}
for(int i=a[]+b[];i>=;i--)
if(c[i]){
c[]=i;break;
}
}
bool Cmp(){
if(a[]!=b[])return ;
for(int i=;i<=a[];i++)
if(a[i]!=b[i])return ;
return ;
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
T=init();
while(T--){
memset(A,,sizeof(A));
n=init();int falg=;
for(int i=;i<=n;i++){
scanf("%s",s);
A[i][]=strlen(s);
for(int j=;j<=A[i][];j++)
A[i][j]=s[A[i][]-j]-'';
}
if(A[][]==&&A[][]==)falg=;
else if(A[][]==&&A[][]==)falg=;
else for(int i=;i<n;i++){
memset(a,,sizeof(a));
memset(b,,sizeof(b));
Mul(A[i-],A[i+],a);
Mul(A[i],A[i],b);
if(!Cmp()){
falg=;break;
}
}
if(falg)printf("No\n");
else printf("Yes\n");
}
fclose(stdin);fclose(stdout);
return ;
}

回文串(palindromes)

【题目描述】

判断是否能将字符串S分成三段非空回文串。

【输入说明】

第一行一个整数T,表示数据组数。

对于每一个组,仅包含一个由小写字母组成的串。

【输出说明】

对于每一组,单行输出"Yes" 或 "No"。

【样例输入】

2

abc

abaadada

【样例输出】

Yes

No

【数据范围】

对于40%的数据,|S|<=100

对于60%的数据,|S|<=1000

对于100%的数据,T<=20,|S|<=20000

乱搞80

/*hash+类似离散化的思想 80 已弃疗2333 */
#include<cstdio>
#include<cstring>
#define maxn 20010
#define P 29
#define ll long long
using namespace std;
ll T,n,A[maxn],B[maxn],a[maxn],b[maxn],p[maxn],falg;
char s[maxn];
void Get(){
p[]=;
for(int i=;i<=;i++)
p[i]=p[i-]*P;
}
void Hash1(){
A[]=;
for(int i=;i<=n;i++)
A[i]=A[i-]*P+s[i];
}
void Hash2(){
B[]=;
for(int i=;i<=n;i++)
B[i]=B[i-]*P+s[n-i+];
}
ll Query1(int l,int r){
return A[r]-A[l-]*p[r-l+];
}
ll Query2(int l,int r){
return B[r]-B[l-]*p[r-l+];
}
int main()
{
freopen("palindromes.in","r",stdin);
freopen("palindromes.out","w",stdout);
scanf("%d",&T);Get();
while(T--){
scanf("%s",s+);
n=strlen(s+);
a[]=;b[]=;
Hash1();Hash2();falg=;
for(int i=;i<=n;i++){
ll x=Query1(,i);
ll y=Query2(n-i+,n);
if(x==y)a[++a[]]=i;
}
for(int i=n;i>=;i--){
ll x=Query1(i,n);
ll y=Query2(,n-i+);
if(x==y)b[++b[]]=i;
}
for(int i=;i<=a[];i++){
for(int j=;j<=b[];j++){
if(a[i]+>b[j]-)break;
ll x=Query1(a[i]+,b[j]-);
ll y=Query2(n-b[j]+,n-a[i]);
if(x==y){
falg=;break;
}
}
if(falg)break;
}
if(falg)printf("Yes\n");
else printf("No\n");
}
fclose(stdin);fclose(stdout);
return ;
}

正解你猜

11.3 morning的更多相关文章

  1. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  2. WinForm 天猫2013双11自动抢红包【源码下载】

    1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...

  3. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  4. CSS垂直居中的11种实现方式

    今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...

  5. C++ 11 多线程--线程管理

    说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...

  6. CSharpGL(11)用C#直接编写GLSL程序

    CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...

  7. ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...

  8. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  9. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

    系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...

随机推荐

  1. bzoj 1500: [NOI2005]维修数列 splay

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 6556  Solved: 1963[Submit][Status ...

  2. libstdc++.so.5: cannot open shared object file: No such file or directory

    中文分词一般会选择ICTCLAS的模块,虽然不能说很完美,但也算是一个不错的选择.它提供了windows版本和linux版本,并支持C/C#/JNI接口.这本来是一个不错的事情,但版本一多,官方似乎就 ...

  3. C语言嵌入式系统编程修炼之三:内存操作

    数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式系统的实际调试中,多借助C语言指针所具 ...

  4. wcf中 生成x5.09证书的工具

    原文链接http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-progr ...

  5. 【Better Code】面向切面编程

    用AOP改善JavaScript代码http://www.w3cfuns.com/thread-5597323-1-1.html

  6. java 去掉字符串右侧空格

    public static String rightTrim(String str) {    String regex = "(.*\\S+)(\\s+$)";    Patte ...

  7. [Exchange]2个不同域之间互发邮件

    1.互相添加DNS. 不多说,构建信任域也需要这样的 2.DNS中添加Exchange的地址解析. 3.配置Exchange. 在exchange里面添加对方的exchange信息 在Receiver ...

  8. 数据导出到Excel中

    自己修改后的一个数据导出到Excel的方法,粘出来与大家共享. 只需要将             System.Web.HttpContext.Current.Response.Charset =   ...

  9. ubuntu 桌面

    u盘虚拟光驱打开.ios,读写到u盘 goagent:wine goagent.exe的路径:右键在终端中运行proxy.py. 终端中wine exe文件 ubuntu安装镜像文件: 下载压缩包解压 ...

  10. poj 2631 Roads in the North【树的直径裸题】

    Roads in the North Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2359   Accepted: 115 ...