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)-系统日志和异常的处理①
系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...
随机推荐
- bzoj 1500: [NOI2005]维修数列 splay
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 6556 Solved: 1963[Submit][Status ...
- libstdc++.so.5: cannot open shared object file: No such file or directory
中文分词一般会选择ICTCLAS的模块,虽然不能说很完美,但也算是一个不错的选择.它提供了windows版本和linux版本,并支持C/C#/JNI接口.这本来是一个不错的事情,但版本一多,官方似乎就 ...
- C语言嵌入式系统编程修炼之三:内存操作
数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式系统的实际调试中,多借助C语言指针所具 ...
- wcf中 生成x5.09证书的工具
原文链接http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-progr ...
- 【Better Code】面向切面编程
用AOP改善JavaScript代码http://www.w3cfuns.com/thread-5597323-1-1.html
- java 去掉字符串右侧空格
public static String rightTrim(String str) { String regex = "(.*\\S+)(\\s+$)"; Patte ...
- [Exchange]2个不同域之间互发邮件
1.互相添加DNS. 不多说,构建信任域也需要这样的 2.DNS中添加Exchange的地址解析. 3.配置Exchange. 在exchange里面添加对方的exchange信息 在Receiver ...
- 数据导出到Excel中
自己修改后的一个数据导出到Excel的方法,粘出来与大家共享. 只需要将 System.Web.HttpContext.Current.Response.Charset = ...
- ubuntu 桌面
u盘虚拟光驱打开.ios,读写到u盘 goagent:wine goagent.exe的路径:右键在终端中运行proxy.py. 终端中wine exe文件 ubuntu安装镜像文件: 下载压缩包解压 ...
- poj 2631 Roads in the North【树的直径裸题】
Roads in the North Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2359 Accepted: 115 ...