清北刷题10.23night
生活随笔
收集整理的這篇文章主要介紹了
清北刷题10.23night
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
NOIP 模擬賽
張若天
2018 年 10 ? 23 ?
題?名稱 監(jiān)聽 實(shí)驗(yàn)室 ?明
可執(zhí)??件名 monitor lab civilization
輸??件名 monitor.in lab.in civilization.in
輸出?件名 monitor.out lab.out civilization.out
每個(gè)測試點(diǎn)時(shí)限 1 秒 1 秒 1 秒
內(nèi)存限制 256MB 256MB 256MB
測試點(diǎn)數(shù)? 10 10 10
每個(gè)測試點(diǎn)分值 10 10 10
是否有 Special Judge ? ? ?
題?類型 傳統(tǒng)型 傳統(tǒng)型 傳統(tǒng)型
是否有附加?件 否 否 否
C++ 語??件名后綴 cpp cpp cpp
C 語??件名后綴 c c c
Pascal 語??件名后綴 pas pas pas
編譯開關(guān)
對于 C++ 語? -lm
對于 C 語? -lm
全部題?使??件輸?輸出,評測環(huán)境 Cena。
考試時(shí)間 3.5h。
忘了什么時(shí)候開始
到清晨才能?睡
也忘了什么叫做結(jié)尾
又有誰在乎呢
凌晨三點(diǎn)的窗前
播放著那段時(shí)光
有?個(gè)驕傲的少年
隱藏他的青春
— 張希/曹?《認(rèn)真地老去》
2
監(jiān)聽
monitor.in/.out/.cpp
弱小和?知不是?存的障礙,拖延癥才是。
【背景】
不閱讀本題的【背景】并不影響通過本題。
三體信息中沒有包含對三體??物形態(tài)的任何描述,?類要在四百多年
以后才能真正看到三體?。在閱讀信息時(shí),葉?潔只能把三體?想象成?類
的形象。
1379 號監(jiān)聽站已經(jīng)存在了上千年,像這樣的監(jiān)聽站,在三體世界中有
?千個(gè),它們?nèi)褙炞⒌伛雎犞钪骈g可能存在的智慧?明的信息。
最初監(jiān)聽站中有上百名監(jiān)聽員,但隨著技術(shù)的進(jìn)步,現(xiàn)在只有?個(gè)?值
守了。監(jiān)聽員是?個(gè)卑微的職業(yè),他們雖然?處恒溫且能保證?活供給的監(jiān)
聽室中,在亂世紀(jì)不必脫?,但他們的?命也就在這??的空間中流逝,能
夠享受到的恒紀(jì)元快樂?其他?要少得多。
1379 號監(jiān)聽員投過??的床?看著外?的三體世界,這是亂紀(jì)元的?
夜,巨?還沒有升起來,?多數(shù)?都處于脫?的冬眠中,甚?植物也本能地
脫?了,成了附著于地表沒有?命的?束?纖維。星光下,?地看上去像?
?塊冰冷的?屬。
這是最孤寂的時(shí)刻,在靜靜的午夜,宇宙向它的聆聽者展?著?漠的荒
涼。1379 號監(jiān)聽員最不愿意看的,就是顯?器上緩緩移動(dòng)的那條曲線,那是
監(jiān)聽系統(tǒng)接收到的宇宙電波的波形,?意義的噪聲。他感到這條?限長的線
就是宇宙的抽象,?頭連著?限的過去,另?頭連著?限的未來,中間只有
為?規(guī)律??命的隨機(jī)起伏。?個(gè)個(gè)?低錯(cuò)落的波峰就像?粒粒??不等的
沙?,整條線就像是所有沙粒排成?形成的?維沙漠,荒涼寂寥,長得令?
?法忍受。你可以沿著它向前向后??限遠(yuǎn),但永遠(yuǎn)找不到歸宿。
【問題描述】
監(jiān)聽的宇宙電波可以抽象成?個(gè)長度為 L 的?寫字母組成的字符串。
3
同時(shí)在三體?總結(jié)出來了 n 段敏感電波的樣?,每段敏感電波的長度
都是 m。
現(xiàn)在請你實(shí)現(xiàn)?個(gè)程序,求出在這長度為 L 的?寫字母組成的字符串
中某個(gè)敏感電波第?次出現(xiàn)的位置(位置從 1 開始計(jì)數(shù)) 。
如果從頭到尾,沒有任何敏感電波出現(xiàn),輸出”no”(不帶雙引號) 。
【輸入格式】
第??三個(gè)整數(shù) L, n, m。
接下來 n ?,每??個(gè)長度為 m 的字符串,表?敏感電波。
接下來??,?個(gè)長度為 L 的字符串,表?監(jiān)聽到的電波。
【輸出格式】
輸出?個(gè)整數(shù)或者?個(gè)字符串”no”(不帶雙引號) 。
【樣例輸入 1】
11 3 3
aba
cba
abc
aaabbabcaba
【樣例輸出 1】
6
【樣例輸入 2】
11 3 3
aba
cba
abc
4
aaabbabzabz
【樣例輸出 2】
no
【數(shù)據(jù)規(guī)模及約定】
對于前 30% 的數(shù)據(jù),1 ≤ L ≤ 100, 1 ≤ n ≤ 100, 1 ≤ m ≤ 20。
對于前 50% 的數(shù)據(jù),1 ≤ L ≤ 10000, 1 ≤ n ≤ 1000, 1 ≤ m ≤ 20。
對于另外 20% 的數(shù)據(jù),n = 1。
對于前 100% 的數(shù)據(jù),1 ≤ L ≤ 10 5 , 1 ≤ n ≤ 10 4 , 1 ≤ m ≤ 20。
5
實(shí)驗(yàn)室
lab.in/.out/.cpp
光錐之內(nèi)都是新聞。
【背景】
不閱讀本題的【背景】并不影響通過本題。
《時(shí)間之外的往事》(節(jié)選) 彎曲空間的動(dòng)?
這個(gè)宇宙的空間并不是平坦的,?是存在著曲率,如果把宇宙的整體想
象為?張?膜,這張膜的表?是弧形的,整張膜甚?可能是?個(gè)封閉的肥皂
泡。雖然膜的局部看似平?,但空間曲率還是?處不在。
早在公元世紀(jì),曾出現(xiàn)過許多極富野?的宇宙航?設(shè)想,其中之?就是
空間折疊。設(shè)想把?范圍空間的曲率?限增?,像?張紙?樣對折,把“紙
?”上相距千萬光年的遙遠(yuǎn)的兩點(diǎn)貼在?起。這個(gè)?案嚴(yán)格說來不應(yīng)稱為宇
宙航?,?應(yīng)該叫做。 “宇宙拖曳” ,因?yàn)樗鼘?shí)質(zhì)上并不是航?到?的地,?是
通過改變空間曲率把?的地花過來。
這種?吞宇宙的事只有上帝才做得?來. 如果加上基本理論的限制.
可能上帝也不?。
對于利?空間曲率航?,后來又出現(xiàn)了?個(gè)更溫和更局部的設(shè)想,?艘
處于太空中的飛船,如果能夠?某種?式把它后?的?部分空間熨平,減?
其曲率、那么飛船就會(huì)被前?曲率史?的空間拉過去,這就是曲率驅(qū)動(dòng)。
曲率驅(qū)動(dòng)不可能像空間折疊那樣瞬間到達(dá)?的地,但卻有可能使飛船以
?限接近光速的速度航?。
但直到云天明情報(bào)被正確解讀前,曲率驅(qū)動(dòng)仍是?個(gè)幻想,同上百個(gè)光
速飛?的幻想?案?樣, ?論從理論上還是技術(shù)上, 沒有?知道它是否可?。
【問題描述】
沿著著曲率驅(qū)動(dòng)的思路,R 君開發(fā)出了時(shí)間旅?傳送門。
R 君將 n-1 個(gè)時(shí)間旅?傳送門部署到了 n 個(gè)星球。如果只?這 n-1 個(gè)
時(shí)間旅?傳送門,R 君發(fā)現(xiàn)這 n 個(gè)星球是兩兩可達(dá)的(也就是?棵樹) 。
6
但是時(shí)間旅?傳送門除了傳送的功能外還額外有著時(shí)間旅?的功能,?
如說 (X i , Y i , T i ) 這個(gè)傳送門,通過這個(gè)傳送門從 X i 到 Y i 時(shí)間就會(huì)增加
T i (T i 可正可負(fù)),通過這個(gè)傳送門從 Y i 到 X i 時(shí)間就會(huì)減少 T i (T i 可正可
負(fù))。
現(xiàn)在 R 君關(guān)?的問題是從 x 星球能不能通往 y 星球,同時(shí)時(shí)間恰好增
加 z(z 可正可負(fù)) 。
由于現(xiàn)在是?個(gè)樹形的結(jié)構(gòu),所以實(shí)際上兩點(diǎn)之間的路徑唯?,所以 R
君很快寫了個(gè)程序計(jì)算出了這個(gè)結(jié)果。
但是隨著 R 君繼續(xù)部署傳送門,這個(gè)問題變得復(fù)雜了起來,所以請你
來幫幫忙。
【輸入格式】
第??兩個(gè)整數(shù) n,q。q 表?之后處理的事件的數(shù)量。
接下來 n-1 ?,每?三個(gè)整數(shù) x i ,y i ,T i 。
接下來 q ?,每?四個(gè)正整數(shù) k, x, y, t。
若 k=0,表?部署?個(gè)新的傳送門 (x,y,t)。
若 k=1,表?詢問是否可以從 x 到 y,使得時(shí)間恰好增加 t。
【輸出格式】
對于每個(gè) k=1 的詢問,輸出???個(gè)答案 yes/no。 (?寫)
【樣例輸入】
5 5
1 2 1
2 3 1
3 4 1
4 5 2
1 1 5 5
1 2 5 5
1 1 5 10
7
0 2 4 -3
1 1 5 10
【樣例輸出】
yes
no
no
yes
【樣例解釋】
添加 (2,4,-3) 后可以從 1->2->3->4->2->3->4->5, 時(shí)間變化是 1+1+1-
(-3)+1+1+2=10。
【數(shù)據(jù)規(guī)模及約定】
對于前 30% 的數(shù)據(jù),1 ≤ n ≤ 1000, 1 ≤ q ≤ 1000 , |T i | ≤ 10 9 。
對于另外 20% 的數(shù)據(jù),不存在 k=0 的輸?。
對于另外 20% 的數(shù)據(jù),只存在?條 k=0 的輸?。
對于前 100% 的數(shù)據(jù),1 ≤ n ≤ 10 5 , 1 ≤ q ≤ 4 × 10 5 , |T i | ≤ 10 9 。
8
文明
civilization.in/.out/.cpp
給歲月以?明,?不是給?明以歲月。
【背景】
不閱讀本題的【背景】并不影響通過本題。
羅輯那邊的?星升了起來并來回移動(dòng),顯然是他站起?來踱步,在地球
上是可以的,但在宇宙中不?,下?我們引??個(gè)重要概念:猜疑鏈。挺怪
的詞?。我開始僅得到這么?個(gè)詞,她沒有解釋,但我后來終于從字?上推
測出了它的含義。他?他是誰?后?再說吧,我們繼續(xù):如果你認(rèn)為我是善
意的,這并不是你感到安全的理由,因?yàn)榘凑盏?條公理,善意?明并不能
預(yù)先把別的?明也想成善意的,所以,你現(xiàn)在還不知道我是怎么認(rèn)為你的,
你不知道我認(rèn)為你是善意還是惡意;進(jìn)?步,即使你知道我把你也想象成善
意的,我也知道你把我想象成善意的,但是我不知道你是怎么想我怎么想你
怎么想我的,挺繞的是不是?這才是第三層,這個(gè)邏輯可以?直向前延伸,
沒完沒了。我懂你的意思。這就是猜疑鏈。這種東西在地球上是見不到的。
?類共同的物種、相近的?化、同處?個(gè)相互依存的?態(tài)圈、近在咫尺的距
離,在這樣的環(huán)境下,猜疑鏈只能延伸??兩層就會(huì)被交流所消解。但在太
空中,猜疑鏈則可能延伸得很長,在被交流所消解之前,?暗戰(zhàn)役那樣的事
已經(jīng)發(fā)?了。
【問題描述】
R 君在繼續(xù)著宇宙社會(huì)學(xué)的研究,R 君發(fā)現(xiàn)是否為善意的?明與他們的
距離到本?明的距離的奇偶有很?的關(guān)系。
所以 R 君提出了如下簡化的問題,考慮?個(gè) n 個(gè)節(jié)點(diǎn)帶邊權(quán)的樹,兩
點(diǎn)間距離是兩點(diǎn)間樹上路徑的邊權(quán)和。
R 君想知道對于?個(gè)點(diǎn)來說,到這個(gè)點(diǎn)是距離奇數(shù)的節(jié)點(diǎn)的距離和,與
到這個(gè)點(diǎn)距離是偶數(shù)的節(jié)點(diǎn)的距離和。
9
【輸入格式】
第??包含兩個(gè)整數(shù) n, q。q 表?詢問數(shù)量。
接下來 n-1 ?,每?三個(gè)數(shù)字 (x,y,z) 表? x 與 y 之間的距離是 z。
接下來 q ?,每??個(gè)整數(shù) x,表?詢問的節(jié)點(diǎn)為 x。
【輸出格式】
輸出包含 q ?,每?兩個(gè)整數(shù),分別表?距離為奇數(shù)的節(jié)點(diǎn)的距離和與
距離為偶數(shù)的節(jié)點(diǎn)的距離和。
【樣例輸入】
4 4
1 2 1
2 3 2
2 4 3
1
2
3
4
【樣例輸出】
4 4
4 2
8 2
8 4
【樣例解釋】
每個(gè)點(diǎn)到 1 號點(diǎn)的距離:0,1,3,4
每個(gè)點(diǎn)到 2 號點(diǎn)的距離:1,0,2,3
每個(gè)點(diǎn)到 3 號點(diǎn)的距離:3,2,0,5
10
每個(gè)點(diǎn)到 4 號點(diǎn)的距離:4,3,5,0
【數(shù)據(jù)規(guī)模和約定】
對于前 20% 的數(shù)據(jù),1 ≤ n ≤ 100。
對于前 40% 的數(shù)據(jù),1 ≤ n ≤ 2000。
對于前 70% 的數(shù)據(jù),1 ≤ n ≤ 5 × 10 4 。
對于前 100% 的數(shù)據(jù),1 ≤ n ≤ 10 5 , q ≤ n, 1 ≤ z ≤ 10 3 。
11
(完)
12 題面
?
/* string + map 水過 */ #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map>#define N 100007using namespace std; int n,m,l,ans,cnt; string s[10002]; map<string,bool>vis; string ss;int main() {freopen("monitor.in","r",stdin);freopen("monitor.out","w",stdout);scanf("%d%d%d",&l,&n,&m);for(int i=1;i<=n;i++)cin>>s[i],vis[s[i]]=1;cin>>s[0];for(int i=0;i<=l-m;i++){ss=s[0].substr(i,m);if(vis[ss]){ans=i+1;break;}}if(!ans) printf("no\n");else printf("%d\n",ans);fclose(stdin);fclose(stdout);return 0; }?
?
/* 各種情況分析,由于路徑權(quán)值的相反性 只要有環(huán),要么不走,要么等效完整走整數(shù)遍。 假設(shè)有k個(gè)環(huán),每個(gè)環(huán)的邊權(quán)和為xi,那么問題轉(zhuǎn)化為 不定方程a*x1+b*x2+c*x3+....+m*xk=T是否存在整數(shù)解。 根據(jù)不定方程整數(shù)解的條件可知,gcd(x1~xm) | T 時(shí)有,否則無。 */ #include<bits/stdc++.h>#define N 411111 #define ll long longusing namespace std; int n,q; ll sum[N]; int toedge[N],cnt; struct Edge {int to,val,next; }; Edge edge[N<<1];int read() {int ret=0,neg=1;char c=getchar();while (c<'0' || c>'9'){if (c=='-') neg=-1;c=getchar();}while (c>='0' && c<='9'){ret=ret*10+c-'0';c=getchar();}return ret*neg; }ll SUM(int x,int y){return sum[y]-sum[x];} ll Abs(ll x){return x>0 ? x : -x;} ll gcd(ll x,ll y){return (y==0) ? x : gcd(y,x%y);}void add(int from,int to,int val) {edge[++cnt]=(Edge){to,val,toedge[from]};toedge[from]=cnt; }void dfs(int x,int fa) {for (int i=toedge[x]; i; i=edge[i].next){int to=edge[i].to;if (to==fa) continue;sum[to]=sum[x]+edge[i].val;dfs(to,x);} }int main() {freopen("lab.in","r",stdin);freopen("lab.out","w",stdout);n=read();q=read();int x,y,z;for (int i=1; i<n; i++){x=read();y=read();z=read();add(x,y,z);add(y,x,-z);}dfs(1,0);int k,t;ll xun=-1;for (int i=1; i<=q; i++){k=read();x=read();y=read();t=read();if (k==0){ll tmp=SUM(y,x);if (xun==-1) xun=Abs(tmp+t);else if (tmp+t!=0) xun=gcd(xun,Abs(tmp+t));}else{ll tmp=Abs((ll)t-SUM(x,y));if (xun==-1)if (tmp==0) puts("yes");else puts("no");else if (tmp%xun==0) puts("yes");else puts("no");}} }?
?
#include<iostream> #include<cstdio> #include<cstring>#define N 100007 #define ll long longusing namespace std; ll n,m,ans1,ans2,cnt,tot; ll x,y,z,q; ll head[N],deep[N],sum[N],f[N][26]; ll in[N],F[N][2],son[N][2]; struct edge{ll u,v,w,nxt; }e[N<<1];inline ll read() {ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }inline void add(int u,int v,int w) {e[++cnt].v=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt; }void dfs(int now,int fa,int c) {f[now][0]=fa;deep[now]=c;for(int i=head[now];i;i=e[i].nxt){int v=e[i].v;if(v==fa) continue;sum[v]=sum[now]+e[i].w;dfs(v,now,c+1);} }void get() {for(int j=1;j<=25;j++) for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1]; }int lca(int a,int b) {if(deep[a]<deep[b]) swap(a,b);int t=deep[a]-deep[b];for(int i=0;i<=t;i++) if(t&(1<<i)) a=f[a][i];if(a==b) return a;for(int i=25;i>=0;i--)if(f[a][i]!=f[b][i])a=f[a][i],b=f[b][i];return f[a][0]; }void solve1() {dfs(1,1,0);get();for(int i=1;i<=m;i++){tot=ans1=ans2=0;q=read();for(int j=1;j<=n;j++){if(j==q) continue;int res=lca(q,j);tot=sum[q]+sum[j]-2*sum[res];if(tot%2) ans1+=tot;else ans2+=tot;}cout<<ans1<<" "<<ans2<<endl;} }void dp(int u,int from)//0 偶數(shù) {son[u][0]=son[u][1]=0;for(int i=head[u];i;i=e[i].nxt){int v=e[i].v;if(v==from) continue;dp(v,u);if(e[i].w%2==1){son[v][1]++;if(in[v]==1){son[v][1]++;son[u][1]++;F[u][0]+=e[i].w*son[v][0];F[u][1]+=e[i].w*son[v][1]; }else{son[u][1]+=son[v][0],son[u][0]+=son[v][1];F[u][0]+=F[v][1]+e[i].w*son[v][1];F[u][1]+=F[v][0]+e[i].w*son[v][0];F[u][1]+=e[i].w; }}else{son[v][0]++;if(in[v]==1){son[v][0]++;son[u][0]++;F[u][0]+=e[i].w*son[v][0];F[u][1]+=e[i].w*son[v][1]; }else{son[u][0]+=son[v][0],son[u][1]+=son[v][0];F[u][0]+=F[v][0]+e[i].w*son[v][0];F[u][1]+=F[v][1]+e[i].w*son[v][1]; F[u][0]+=e[i].w; }}} }void solve2() {for(int i=1;i<=m;i++){q=read();memset(f,0,sizeof F);memset(son,0,sizeof son);dp(q,q);cout<<F[q][1]<<" "<<F[q][0]<<endl;} }int main() {freopen("civilization.in","r",stdin);freopen("civilization.out","w",stdout);n=read();m=read();for(int i=1;i<n;i++){x=read();y=read();z=read();add(x,y,z);add(y,x,z);}if(n<=5000) solve1();else solve2();fclose(stdin);fclose(stdout);return 0; } 40暴力?
#include <cstdio> #include <cstring> #include <algorithm>using namespace std;// 70%保證答案不爆intint n,q; int H[100005], X[200005], P[200005], w[200005], tot;inline void add(int x,int y,int z) {P[++tot]=y;X[tot]=H[x];H[x]=tot;w[tot]=z; } typedef long long LL; LL f[2][100005]; // 子樹 LL ans[2][100005]; int siz[2][100005]; // 子樹 int siz2[2][100005]; // 整棵樹void dfs1(int x,int fa) {siz[0][x] = 1;for(int i=H[x]; i; i=X[i]){if(P[i] == fa) continue;dfs1(P[i],x);if(w[i]&1){siz[0][x] += siz[1][P[i]];siz[1][x] += siz[0][P[i]];f[0][x] += f[1][P[i]] + w[i]*siz[1][P[i]];f[1][x] += f[0][P[i]] + w[i]*siz[0][P[i]];}else{siz[0][x] += siz[0][P[i]];siz[1][x] += siz[1][P[i]];f[0][x] += f[0][P[i]] + w[i]*siz[0][P[i]];f[1][x] += f[1][P[i]] + w[i]*siz[1][P[i]];}} }void dfs2(int x,int fa) {for(int i=H[x]; i; i=X[i]){if(P[i]==fa) continue;if(w[i]&1){siz2[0][P[i]] = siz2[1][x];siz2[1][P[i]] = siz2[0][x];ans[0][P[i]] = f[0][P[i]] + ans[1][x] - (f[0][P[i]]+w[i]*siz[0][P[i]]) + w[i]*(siz2[1][x]-siz[0][P[i]]) ;ans[1][P[i]] = f[1][P[i]] + ans[0][x] - (f[1][P[i]]+w[i]*siz[1][P[i]]) + w[i]*(siz2[0][x]-siz[1][P[i]]) ;}else{siz2[0][P[i]] = siz2[0][x];siz2[1][P[i]] = siz2[1][x];ans[0][P[i]] = f[0][P[i]] + ans[0][x] - (f[0][P[i]]+w[i]*siz[0][P[i]]) + w[i]*(siz2[0][x]-siz[0][P[i]]) ;ans[1][P[i]] = f[1][P[i]] + ans[1][x] - (f[1][P[i]]+w[i]*siz[1][P[i]]) + w[i]*(siz2[1][x]-siz[1][P[i]]) ;}dfs2(P[i],x);} }int main() {freopen("civilization.in", "r", stdin);freopen("civilization.out", "w", stdout);scanf("%d%d",&n,&q);for(int i=1,x,y,z; i<n; i++){scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}dfs1(1,0);ans[0][1] = f[0][1];ans[1][1] = f[1][1];siz2[0][1] = siz[0][1];siz2[1][1] = siz[1][1];dfs2(1,0);int x;while(q--){scanf("%d",&x);printf("%lld %lld\n",ans[1][x],ans[0][x]);}fclose(stdout);return 0; } 正解待補(bǔ)檔?
轉(zhuǎn)載于:https://www.cnblogs.com/L-Memory/p/9846404.html
總結(jié)
以上是生活随笔為你收集整理的清北刷题10.23night的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell脚本中command not
- 下一篇: bool 字符串方法 和for循环