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

  輸入  [復制]

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.pswp.cn/news/370649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370649.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

height百分比失效

heigh:100%失效 解決方案&#xff1a; 第一種 html, body { height: 100%; } 第二種 div { height: 100%; position: absolute; } 非定位元素的寬高百分比計算不會將 padding 計算在內&#xff0c;而定位元素會計算在內。 利用這個特性可以實現圖片左右半區點擊分別上一張圖…

Java堆空間,本機堆和內存問題

最近&#xff0c;我在和一個朋友討論為什么Java進程使用的內存比啟動Java進程時設置的最大堆多。 代碼創建的所有Java對象都是在Java堆空間內創建的&#xff0c;其大小由-Xmx選項定義。 但是一個Java進程由很多空間組成&#xff0c;而不僅僅是Java堆空間。 以下是組成Java進程…

mysql視圖表怎么設置約束_MySQL一一sql的視圖、索引、約束

一、視圖本質上相當于一張**“虛擬表”**&#xff0c;可當作獨立的一張表進行操作(增、刪、改、查)** 作用&#xff1a;**** a)**可通過權限控制&#xff0c;只將“表中的少數列”暴露給數據庫用戶&#xff0c;而不讓該用戶直接操縱數據庫中“實際表”** b)**…

Software Development Life Cycle

轉載于:https://www.cnblogs.com/genezhao/p/6879848.html

python中 的用法_詳解python中@的用法

python中的用法 是一個裝飾器&#xff0c;針對函數&#xff0c;起調用傳參的作用。 有修飾和被修飾的區別&#xff0c;function作為一個裝飾器&#xff0c;用來修飾緊跟著的函數&#xff08;可以是另一個裝飾器&#xff0c;也可以是函數定義&#xff09;。 代碼1 結果1 Its fun…

ArrayAndString(數組和字符串)

1.實現一個算法&#xff0c;確定一個字符串的所有字符是否全都不同。假使不允許使用額外的數據結構&#xff0c;又該怎么處理&#xff1f; public class UniqueChars {public static void main(String[] args) {// TODO Auto-generated method stubString string "abcdef…

MyBatis教程– CRUD操作和映射關系–第2部分

為了說明這一點&#xff0c;我們正在考慮以下示例域模型&#xff1a; 會有用戶&#xff0c;每個用戶可能都有一個博客&#xff0c;每個博客可以包含零個或多個帖子。 這三個表的數據庫結構如下&#xff1a; CREATE TABLE user (user_id int(10) unsigned NOT NULL auto_incr…

position 的屬性值

理論上來說&#xff0c;全部 position 的取值有8個 包括&#xff1a;position&#xff1a;static | relative | absolute | fixed | sticky | initial | inherit | unset 其中最常用的是 static 、relative、absolute、fixed 和 sticky initial、inherit、unset 是css的關鍵…

[ JavaScript ] JavaScript 實現繼承.

對于javascript中的繼承&#xff0c;因為js中沒有后端語言中的類式繼承。所以js中的繼承&#xff0c;一般都是原型繼承(prototype)。 function P (name){this.name name;this.say function(){console.log(p);} }function S (name,id){this.id id;this.eat function(){conso…

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明天的計劃 肝到凌晨還剩下哪些任務 團…

html 01前沿-web介紹

1. 認識網頁 網頁主要由文字、圖像和超鏈接等元素構成。當然&#xff0c;除了這些元素&#xff0c;網頁中還可以包含音頻、視頻以及Flash等。 2. 瀏覽器&#xff08;顯示代碼&#xff09; 瀏覽器是網頁顯示、運行的平臺&#xff0c;常用的瀏覽器有IE、火狐&#xff08;Firefox…

避免寫慢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;…

CentOS7搭建lamp環境

Mysql安裝 CentOS 7 版本將MySQL數據庫軟件從默認的程序列表中移除&#xff0c;用mariadb代替了。MariaDB數據庫管理系統是MySQL的一個分支&#xff0c;主要由開源社區在維護&#xff0c;采用GPL授權許可。開發這個分支的原因之一是&#xff1a;甲骨文公司收購了MySQL后&#x…

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…