輸入乙個字串,求字串除了空格的字元個數
這種考你會不會程式設計的題不會?
#include
#include
#include
using
namespace std;
int ans;
string c;
intmain()
乙個長度為n序列,被中間點m分成兩半,m左邊和m右邊。
左邊戰鬥力為
∑ i=
1m−1
(m−i
)∗ai
\sum_^(m-i)*a_i
i=1∑m−
1(m
−i)∗
ai∑i=
m+1n
(i−m
)∗ai
\sum_^(i-m)*a_i
i=m+1∑
n(i
−m)∗
ai找到乙個數值加s2s2
s2,使兩邊的戰鬥力之差最小
先處理好兩邊戰鬥力
暴力列舉位置。注意要用longlong
#include
#include
#define n 100010
#define lls long long
using
namespace std;
lls n,c[n]
,m,p1,s1,s2,ans1,ans2,mins,mark;
intmain()
}for
(lls i=m+
1;i<=n;i++)}
if((mins==
abs(ans1-ans2)
&&mark||mins<
abs(ans1-ans2)
)printf
("%lld"
,mark)
;else
printf
("%lld"
,m);
}
n個人,有不同的到達時間。一輛車,來回一次要mmi
nm\ \ min
mmin
。安排乙個來回時間,使所有人等待時間之和最小。
我們可以發現m很小可是t卻很大。所有我們不一定要從t入手。因為乙個人會影響到他的只有之前的m−1
mi
nm-1\ \ min
m−1min
。用fi,j
f_fi
,j表示第i個人等了j的等待時間總數。然後我們列舉i和列舉上一班車的最後乙個人j。之後列舉那個人等了多久k。我們就可以計算出這個人上車最少等待時間
t j+
k+m−
ti
t_j+k+m-t_i
tj+k+
m−ti
然後我們可以更新fi,
wf_
fi,wfi,
w=mi
nf_=min\,f_+s_+(i-j)*w\}
fi,w=
min其中用si,
js_
si,j
表示i到j的人都等第j個人上車需要的時間
#include
#include
#include
#define n 510
#define m 210
using
namespace std;
int n,m,t[n]
,s[n]
[n],f[n]
[m],ans;
intmain()
for(
int i=
2;i<=n;i++
)//dp
for(
int j=
0;j)for
(int k=
0;k<=m;k++
) ans=
2e9;
for(
int i=
0;i<=m;i++
) ans=
min(ans,f[n]
[i])
;printf
("%d\n"
,ans)
;}
一棵n個點的二叉樹,每個點有不同的權值。一棵樹對稱就是整棵樹的左右子節點互換之和長的和之前一樣。求這棵樹上最大的一顆對稱二叉樹。
對於每個點我們給他兩個特徵值
z 1i
=lso
ni∗2
+rso
ni+w
i∗
4z1_i=lson_i*2+rson_i+w_i*4
z1i=l
soni
∗2+
rson
i+w
i∗4
z 2i
=lso
ni+r
soni
∗2+w
i∗
4z2_i=lson_i+rson_i*2+w_i*4
z2i=l
soni
+rs
oni
∗2+w
i∗4
lson:這個點有沒有左子節點
rson:這個點有沒有右子節點
然後先左後右的跑一邊,記錄跑到的點的z1和這顆子樹包含的範圍。
再先右後左的跑一邊,記錄跑到的點的z2和這顆子樹包含的範圍。
之後對於每個節點用字串hash判斷一下z1對於範圍是否和z2對應範圍相等,如果相等那麼這棵子樹就是一顆對稱二叉樹。
時間負責度:o(n
)o(n)
o(n)
#include
#include
#define n 1000010
#define p 10007
#define ull unsigned long long
using
namespace std;
int sz[n]
,a1[n]
,b1[n]
,e1[n]
,a2[n]
,b2[n]
,e2[n]
,z[n]
,f[n]
;int maxs,n,tot,ls[n]
,rs[n]
,w[n]
;ull hash1[n]
,hash2[n]
,pows[n]
;void
read
(int
&x)void
dfs1
(int x)
void
dfs2
(int x)
ull hash1z
(int l,
int r)
ull hash2z
(int l,
int r)
bool
check
(int x)
intmain()
dfs1(1
);//正搜
tot=0;
dfs2(1
);//反搜
pows[0]
=1;for
(int i=
1;i<=n;i++
)//字串雜湊
for(
int i=
1;i<=n;i++
)//列舉節點if(
check
(i))
//判斷相等
maxs=
max(maxs,sz[i]);
printf
("%d"
,maxs)
;}
NOIP2018普及組複賽試題第4題解析
第4題 對稱二叉樹 題目描述 一棵有點權的有根樹如果滿足以下條件,則被軒軒稱為對稱二叉樹 二叉樹 將這棵樹所有節點的左右子樹交換,新樹和原樹對應位置的結構相同且點權相等。下圖中節點內的數字為權值,節點外的 id表示節點編號。現在給出一棵二叉樹,希望你找出它的一棵子樹,該子樹為對稱二叉樹,且節點數 最...
NOIP2018普及組 參賽總結
發現就我只打了這麼一點字,所以再重新發一下 考前 考試前一天晚上一直在看電視 看到了10點還是11點吧,寫了一會兒會兒作業,但我覺得這不是考砸了的理由 誰叫我本來就如此之水 第二天早上很早就起床了,還順便跟外婆還有老媽去小區外面吃了個早餐。然後老媽帶我來了考場,也是在附近萬達吃了飯,走路就花了我差不...
NOIP2018普及組 標題統計
題目大意 凱凱剛寫了一篇美妙的作文,請問這篇作文的標題中有多少個字元?注意 標題中可能包含大 小寫英文本母 數字字元 空格和換行符。統計標題字 符數時,空格和換行符不計算在內。評測位址 本題考察知識點 c 字元及字串讀入方式,cin,getline,scanf,getchar 的使用等 演算法分析 ...