NOIP2017年11月9日赛前模拟

最后一次NOIP模拟了·····

题目1:回文数字

  Tom 最近在研究回文数字。
  假设 s[i] 是长度为 i 的回文数个数(不含前导0),则对于给定的正整数 n 有:

  

  以上等式中最后面的括号是布尔表达式,Tom 想知道S[n] mod 233333 的值是多少。

  输入格式

  第一行一个正整数 T 。
  接下来输出共 T 行,每行一个正整数 n 。

  输出格式

  输出共 T 行,每行一个整数,表示 S[n] mod 233333 。  

  样例数据 1

  输入  [复制]


2  

  输出

9

  备注

  【数据规模与约定】
  对于 30% 的数据:n≤5。
  对于另 20% 的数据:∑n≤10^7。
  对于另 20% 的数据:T=1。
  对于 100% 的数据:T≤5*10^5;n≤10^9。

  

  根据题意可以推出来就是一个差比数列·····用快速幂和逆元(中间有除法)求解即可

  然而考试的时候作死cout<<endl直接超时····下次输出换行一定要用cout<<"\n“·····

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const long long mod=233333;
const long long niyuan=25926;
long long a,T;
inline long long R(){char c;long long f=0;for(c=getchar();c<'0'||c>'9';c=getchar());for(;c<='9'&&c>='0';c=getchar()) f=(f<<3)+(f<<1)+c-'0';return f;
}
inline long long ksm(long long a,long long b){long long ans=1;a%=mod;while(b){if(b&1)    ans=ans*a%mod;b/=2;a=a*a%mod;}return ans;
}
int main(){//freopen("bug.in","r",stdin);//freopen("bug.out","w",stdout);T=R();while(T--){a=R();if(a==1||a==2) cout<<"9"<<endl;else{a=(a-1)/2;        long long b=ksm(10,a+1);long long c=b;b=b*((2*a%mod+1)%mod)%mod;c=(c-10)*niyuan%mod*2%mod;b=((b-1-c)%mod+mod)%mod;cout<<b<<"\n";}}return 0;
}

 

题目2:路径统计

  一个 n 个点 m 条边的无重边无自环的无向图,点有点权,边有边权,定义一条路径的权值为路径经过的点权的最大值乘边权最大值。
  求任意两点间的权值最小的路径的权值。

  输入格式

  第一行两个整数 n ,m ,分别表示无向图的点数和边数。
  第二行 n 个正整数,第 i 个正整数表示点i的点权。
  接下来 m 行每行三个正整数 ui,vi,wi ,分别描述一条边的两个端点和边权。

  输出格式

  输出 n 行,每行 n 个整数。
  第 i 行第 j 个整数表示从 i 到 j 的路径的最小权值;如果从 i 不能到达 j ,则该值为 -1 。特别地,当 i=j 时输出 0 。

  样例数据 1

  输入  [复制]

3 3 
2 3 3 
1 2 2 
2 3 3 
1 3 1

  输出

0 6 3 
6 0 6 
3 6 0

  备注

  【样例输入输出2】
     见选手目录下path.in/path.ans。

  【数据范围与约定】
  对于 20% 的数据:n≤5;m≤8。
  对于 50% 的数据:n≤50。
  对于 100% 的数据:n≤500;m≤n*(n-1)/2,边权和点权不超过10^9 。

  考虑直接用floyd的话会出现错误···比如说我们用k1更新f[i][j]后,下次用k2更新f[i][j]时可能会出错····

  方法是我们将每个点的点权从小到大排序··在枚举最外层的中转点时我们按升序枚举···这样就能保证正确性,具体怎么证明这里就不多写了···

  注意能开int的地方就开int··不然要超时

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cctype>
using namespace std;
const int N=505;
struct node{int val,id;
}p[N];
int n,m,mp[N][N],val[N],me[N][N];
long long dis[N][N];
bool Visit[N],jud[N][N];
inline int R(){char c;int f=0;for(c=getchar();c<'0'||c>'9';c=getchar());for(;c<='9'&&c>='0';c=getchar()) f=(f<<3)+(f<<1)+c-'0';return f;
}    
inline long long Rl(){char c;long long f=0;for(c=getchar();c<'0'||c>'9';c=getchar());for(;c<='9'&&c>='0';c=getchar()) f=(f<<3)+(f<<1)+c-'0';return f;
}
int buf[1024];
inline void write(long long x){if(!x){putchar('0');return ;}if(x<0){putchar('-');x=-x;}while(x){buf[++buf[0]]=x%10,x/=10;}while(buf[0]) putchar(buf[buf[0]--]+48);return ;
}
inline bool cmp(const node &a,const node &b){return a.val<b.val;
}
int main(){//freopen("path.in","r",stdin);///freopen("path1.out","w",stdout);n=R();m=R();int a,b;long long c;memset(jud,false,sizeof(jud));for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) mp[i][j]=me[i][j]=1e+9,dis[i][j]=2e+18;for(int i=1;i<=n;i++) val[i]=R(),p[i].val=val[i],p[i].id=i;sort(p+1,p+1+n,cmp);for(int i=1;i<=m;i++){a=R(),b=R(),c=R();me[a][b]=me[b][a]=c;mp[a][b]=mp[b][a]=max(val[a],val[b]);jud[a][b]=jud[b][a]=true;dis[a][b]=dis[b][a]=(long long)mp[b][a]*me[b][a];}for(int K=1;K<=n;K++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){int k=p[K].id;if(!jud[i][k]||!jud[k][j]||i==j) continue;int maxp=max(mp[i][k],mp[k][j]);        int maxe=max(me[i][k],me[k][j]);if((long long)maxp*maxe<dis[i][j]){dis[i][j]=(long long)maxp*maxe;mp[i][j]=maxp;me[i][j]=maxe;jud[i][j]=true;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) write(0),putchar(' ');else if(jud[i][j]) write(dis[i][j]),putchar(' ');else write(-1),putchar(' ');}putchar('\n');}return 0;}

 

题目3:字符串

  给定两个字符串 s1 和 s2 ,两个字符串都由 26 个小写字母中的部分字母构成。现在需要统计 s2 在 s1 中出现了的次数。

  对于 s1 中的每个位置 i ,设 strlen(s2)=m ,若:

  

  (最外层中括号为布尔表达式)

  则认为 s2 在 s1 的 i 处出现了一次,现在想知道,s2 在 s1 中一共出现了多少次?

  输入格式

  第一行为一个字符串 s1 ;
  第二行为一个字符串 s2 ;
  第三行为一个整数 k 。

  输出格式

  输出一行一个整数,表示 s2 在 s1 中出现的次数。

  样例数据 1

  输入  [复制]

ababbab 
aba 
1

  输出

3

  备注

  【数据范围与约定】
  前 10% 的数据:n>m。
  前 30% 的数据:n,m≤1000。
  对于另 40% 的数据:k≤20。
  对于 100% 的数据:n≤200000;m≤100000;k≤100。

  由于正解要用到后缀数组不属于NOIP范围··所以这里我就先挖个坑吧··只讲讲70分

  暴力肯定是枚举每一个起始位置暴力匹配···70分算法就是它的优化··每次匹配的时候我们用hash+二分来匹配即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+5;
const int base=61;
int n,m,ans=0,k;
unsigned long long bt[N],hash1[N],hash2[N];
char s1[N],s2[N];
inline void pre(){bt[0]=1;for(int i=1;i<=n;i++) bt[i]=bt[i-1]*base;for(int i=n;i>=1;i--) hash1[i]=hash1[i+1]*base+s1[i]-'a';for(int i=m;i>=1;i--) hash2[i]=hash2[i+1]*base+s2[i]-'a';
}
inline int getans(int st){int cnt=0,po=1;while(cnt<=k&&po<=m){int le=0,ri=m-po;while(le<=ri){int mid=(ri+le)/2;if((hash2[po]-hash2[po+mid+1]*bt[mid+1])==(hash1[st+po-1]-hash1[st+po+mid]*bt[mid+1])) le=mid+1;else ri=mid-1;}if(po+ri!=m) cnt++;po=po+ri+2;}if(cnt<=k) return 1;else return 0;
}
int main(){//freopen("a.in","r",stdin);scanf("%s%s",s1+1,s2+1);scanf("%d",&k);n=strlen(s1+1);m=strlen(s2+1);pre();for(int i=1;i<=n-m+1;i++) ans+=getans(i);cout<<ans<<"\n";return 0;
}

 

 

转载于:https://www.cnblogs.com/AseanA/p/7811278.html

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

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

相关文章

mysql视图表怎么设置约束_MySQL一一sql的视图、索引、约束

一、视图本质上相当于一张**“虚拟表”**&#xff0c;可当作独立的一张表进行操作(增、删、改、查)** 作用&#xff1a;**** a)**可通过权限控制&#xff0c;只将“表中的少数列”暴露给数据库用户&#xff0c;而不让该用户直接操纵数据库中“实际表”** b)**…

Software Development Life Cycle

转载于:https://www.cnblogs.com/genezhao/p/6879848.html

ArrayAndString(数组和字符串)

1.实现一个算法&#xff0c;确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构&#xff0c;又该怎么处理&#xff1f; public class UniqueChars {public static void main(String[] args) {// TODO Auto-generated method stubString string "abcdef…

position 的属性值

理论上来说&#xff0c;全部 position 的取值有8个 包括&#xff1a;position&#xff1a;static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed 和 sticky initial、inherit、unset 是css的关键…

mysql数据库应用的权限层级_MySQL数据库的用户权限管理

嗨&#xff01;各位小伙伴今天翻了一下历史记录MySQL 数据库还有点内容今天开始我们就来补上吧~用户权限管理伙伴们要知道&#xff0c;在数据库方面有两个方向。一个是数据库管理员(Database Administrator)简称DBA&#xff0c;一个是数据库开发工程师(Database Developer)&…

linux i2c adapter 增加设备_Linux驱动之I2C驱动架构

一、Linux的I2C体系结构主要由三部分组成&#xff1a;(1) I2C核心提供I2C控制器和设备驱动的注册和注销方法&#xff0c;I2C通信方法&#xff0c;与适配器无关的代码以及探测设备等。(2) I2C控制器驱动(适配器)(3) I2C设备驱动二、重要的结构体i2c_adapter//i2c控制器(适配器)i…

Alpha-end

前言 失心疯病源10团队代码管理github个人感悟 肝不动了&#xff0c;肝不动了。明天如果见不到我&#xff0c;不要太想我。站立会议 队名&#xff1a;PMS530雨勤&#xff08;组长&#xff09; 今天完成了那些任务 熬夜肝代码代码签入github明天的计划 肝到凌晨还剩下哪些任务 团…

避免写慢SQL

最近在整理数据库中的慢SQL&#xff0c;同时也查询了相关资料。记录一下&#xff0c;要学会使用执行计划来分析SQL。 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一&#xff0c;而且这是被MySQL的数据库引擎处理的。当有很多相同…

为什么子孙后代会讨厌使用java.util.Stack

在我用无意义的重言式杀死你之前&#xff0c;这是要点 如果您的应用程序接近实时&#xff0c;或者将代码发送到Mars&#xff0c;则需要保留Java中默认的Stack实现。 根据LinkedList编写您自己的版本。 同样&#xff0c;如果您的应用程序是关键任务&#xff0c;并且希望堆栈由…

play 连接mysql_Play framework 2.x 连接mysql | 学步园

笔者所使用的系统为64位 windows7。本文假设java1.5版本以上环境已经搭好&#xff0c;play 框架已经下载至本地。首先我们创建一个项目。命令行进入play的目录命令&#xff1a;play new demo再次输入项目名字输入2 选择java项目创建完成界面OK&#xff0c;一个play框架下的java…

rpm -e --nodeps_微课 | rpm的思维导图

前导课程&#xff1a;微课 | rpm的查询、升级与卸载命令本次微课将演示使用xmind绘制rpm思维导图的过程&#xff0c;包括视频文字&#xff0c;大约需要你10分钟。另外&#xff0c;文末还有一则IT冷笑话&#xff0c;学习之余、会心一笑:)这个思维导图将包含以下内容&#xff1a;…

border-sizing属性详解和应用

box-sizing用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型。它有content-box、border-box和inherit三种取值。inherit指的是从父元素继承box-sizing表现形式&#xff0c;不再冗赘。1. 属性讲解 content-box 默认值&#xff0c;也是css2.1中的盒子模型。在计算 width和…

Couchbase:使用Twitter和Java创建大型数据集

在播放/演示Couchbase或任何其他NoSQL引擎时&#xff0c;创建大型数据集的一种简单方法是将Twitter feed注入到数据库中。 对于这个小应用程序&#xff0c;我正在使用&#xff1a; Couchbase Server 2.0服务器 Couchbase Java SDK &#xff08;将由Maven安装&#xff09; T…

西门子scl语言编程手册_西门子SCL编程PEEK指令讲解

单词“peek”在英语中表示“偷看&#xff0c;瞥一眼”&#xff0c;在计算机编程中表示“读取数据”。在西门子SCL编程中&#xff0c;PEEK指令可以用来读取输入缓存区(I)、输出缓存区(Q)、位存储区(M)及数据块(DB)中的数据&#xff0c;常用作间接寻址。今天这篇文章&#xff0c;…

Guava的Collections2:过滤和转换Java集合

Groovy的便利之一是能够通过Groovy的闭包支持轻松地对集合执行过滤和转换操作。 Guava将对集合的过滤和转换引入标准Java&#xff0c;这是本文的主题。 Guava的Collections2类具有两个公共方法&#xff0c;这两个方法都是静态的。 方法filter&#xff08;Collection&#xff0…

钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

钉钉建好一个群打开群设置, 找到群机器人添加一个你想要的机器人可以使用自定义自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址)到这里, 钉钉机器人设置好了,接下来我们对照文档进行配置https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq/XAzBI -…

mysql加锁语法_MySql 加锁问题

1、设置非自动提交 set autocommit0; 这时候 for update才会起作用2、一般用法 set autocommit0; for update(加锁) ; commit/rollback; set autocommit1;首先看一下&#xff0c;set autocommit0 后&#xff0c;执行哪些语句会自动加锁&#xff0c;加的是什么锁&#xff1f…

td过长,将固定宽度table撑开

解决办法&#xff1a; 在table上加上样式: table{table-layout:fixed;word-break:break-all} table-layout:fixed tablle的列宽由表格宽度和列宽设定。 word-break:break-all 允许在单词内换行。 正常情况下&#xff1a; table表格中td过长&#xff1a; 加上样式之后&#…

Android几秒后自动关闭dialog

代码改变世界 Android几秒后自动关闭dialog AlertDialog.Builder builder new AlertDialog.Builder(v.getContext());builder.setTitle("发送成功&#xff01;");builder.setMessage("2秒后自动关闭&#xff01;");builder.setCancelable(true);final Ale…

控制元素的div属性

1、需求分析 改变元素的宽、高、颜色、显示、重置等属性。 2、技术分析 基础的css、html、js 3、详细分析 如图&#xff0c;单击按钮&#xff0c;改变元素属性: 3.1 HTML部分 根据视图不难发现&#xff0c;内容分两大不分:按钮栏和效果图&#xff0c;所以设置两个div。 <…