11.3 morning
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的更多相关文章
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
- WinForm 天猫2013双11自动抢红包【源码下载】
1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- CSS垂直居中的11种实现方式
今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
- CSharpGL(11)用C#直接编写GLSL程序
CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...
- ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...
随机推荐
- python处理csv数据
import csv #从文件读取 reader = csv.reader(file(srcFilePath,'rb')) for line in reader: #忽略第一行 if reader.l ...
- 自定义JSON配置器
比如要写个专门处理float类型的方法,然后注册到JSON配置器中,具体如下: 配置器代码如下: import java.math.RoundingMode; import java.text.Num ...
- 14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小 改变 InnoDB ...
- 【HDOJ】1394 Minimum Inversion Number
逆序数的性质.1. 暴力解 #include <stdio.h> #define MAXNUM 5005 int a[MAXNUM]; int main() { int n; int i, ...
- 从 mian 函数开始一步一步分析 nginx 执行流程(一)
如不做特殊说明,本博客所使用的 nginx 源码版本是 1.0.14,[] 中是代码所在的文件! 我们先贴出 main 函数的部分代码: [core/nginx.c] int ngx_cdecl ma ...
- -_-#gb2312解码
百度视频采用gb2312编码,点击出来的链接中的中文转成了gb2312,而gb2312无法解码 如果链接中的中文直接utf-8编码,就没问题,但编辑后台有长度限制 关于URL编码 JS(Unicode ...
- 2015第44周五Java集群技术(转)
从http://blog.csdn.net/cdh1213/article/details/21443239上看到这篇文章,感觉很不错,找好久没找到中文出处,最早看是从http://www.these ...
- 每天进步一点点--JS中的getYear()
又是这两天在项目中遇到的,或许很简单,但真实第一次遇到,记录一下. 在页面上用JS获取了一下当前的日期,并用getYear()方法返回了当前的年度,2013也没问题,代码在IE中都测试通过了之后就提交 ...
- robotium源码方法备注---clicker.java
1.clickOnScreen(float x,float y) 在屏幕上点击一个指定的区域(x,y)横纵坐标 2.clickLongOnScreen(float x,float y, int tim ...
- UnderStand Perspective Rasterization, SV_POSITION(gl_FragCoord) to Pixel, SV mean Systems Value
Shader "UnderStandPRR" { Properties { _MainTex ("Texture", 2D) = "white&quo ...