比賽鏈結
聽了偶像的話,決定也來寫一寫題解哈哈哈~
可能編碼風格不是很好orz
題解寫得不好!湊合著看吧~
a水題將乙個正實數四捨五入。
因為輸入的浮點數長度小於等於2000,已經超過了double的資料範圍,所以我是用字串做的。
先判斷是否存在小數點,不存在的話直接輸出。
存在的話判斷小數點後一位的數是否大於等於5來決定是否進製。
chars[maxn];
void
solve()
if(s[pos+1]<'5'
)
pos--;
rep(i,
0,pos)s[i]-='0'
;
bool ju=0
; s[pos]++;
int pp=pos;
while(1
)
s[--pp]++;
continue
; }
break
; }
if(ju)printf("1"
); rep(i,
0,pos)printf("
%c",s[i]+'0'
);}
b給你兩個陣列a,b。
讓你有多少種取法使得從a中取乙個數ai,從b中取乙個數bj使得ai+bj是乙個質數。
我是先求出200000內的質數,然後記錄b中每個數出現的次數。
a陣列記錄個數去重,列舉a。
intpri[maxn],cnt;
bool
vis[maxn];
void
init()
}}int
n,m,a[maxn],b,cntb[maxn],cnta[maxn],ma;
ll res;
void
solve()
res=res+1ll*cnta[a[i]]*sum;
}plld(res);
}
c不管a的話題意相當於:有n座山,第i做山的高度為hi,小c只能從當前位置i移動到右邊的位置j,且該位置的高度比原位置的高度大。即i然後有q個詢問,每個詢問給x,w。x代表起始位置,w代表小c的體力值,問小c能到達的最大位置。
最開始看錯題意(傻
把hj*(j-i+1)理解成hj*(j-i)
做法:先預處理,以每個點為起點,求每乙個它到能到達的位置需要的體力值。可能會出現當前位置pos到x
intn,q;
inta,xx,h[maxn];
ll x[maxn][maxn];
vector
vec[maxn],ans[maxn];
pii p[maxn];
intcnt;
void
solve()
x[i][j]=mi;
vec[i].pb(mk(x[i][j],j));
}sort(vec[i].begin(),vec[i].end());
int si=vec[i].size();
if(si)ans[i].pb(vec[i][0
]); rep(j,
1,si-1
)
}while(q--)
}
(怎麼有點懶得寫了orz
d(不會qwq
e(水題
記錄質數,然後記錄位置是質數的字元,c,s,u出現的次數
intpri[maxn],cnt;
bool
vis[maxn];
void
init()
}}char
str[maxn];
intc,s,u;
void
solve()
}if(c>=2&&s&&u)puts("
yes"
);
else puts("no"
);}
f給你乙個序列,讓你求最長的完美子串行長度
乙個序列是完美的:對於所有的1<=i,滿足b[i]不是b[i + 1]的因數。
做法:預處理每個數的因子fac,然後對於第i個數,求前邊i-1個數中不是ai的因子且長度最長的長度,我是用線段樹做的,找到兩個相鄰因子中間的數的最大長度。
vectorfac[maxn];void
init()
}sort(fac[i].begin(),fac[i].end());
}}struct
nodea[maxn
<<2
];int
n;void build(int k,int l,int
r)void update(int k,int l,int
x)
int mid=(a[k].l+a[k].r)>>1
;
if(l<=mid)update(k<<1
,l,x);
else update(k<<1|1
,l,x);
a[k].ma=max(a[k<<1].ma,a[k<<1|1
].ma);
}int query(int k,int l,int
r)int
ans;
void
solve()
res=max(res,query(1,x+1
,1e5));
ans=max(ans,res+1
); update(
1,x,res+1
); }
pd(ans);
}
g算出的所有連續子串行中有多少滿足:
1,所有數的和為k的倍數;
2,且其和至少為z;
記錄字首和%k的和,然後對於當前位置的sum,滿足的是sum-sumi>=z,即sumi<=sum-z,看這個數在vec中的位置
inth雜湊n,k,z,a[maxn];
vector
vec[maxn];
ll res;
void
solve()
int pos=upper_bound(vec[y].begin(),vec[y].end(),sum-z)-vec[y].begin();
//cout' 'res+=pos;
}plld(res);
}
給你兩個字串s和t,問你s中有多少個子串,而這個子串不是t的子串
(用map和unordered_map都超時了qwq
const ull base=233;int
n,m;
char
s[maxn],t[maxn];
ull p[maxn],has1[maxn],has2[maxn];
void
init()
ull get1(
int l,int
r)ull get2(
int l,int
r)ull pp[maxn*maxn];
intres,cnt;
void
solve()
sort(pp+1,pp+1+cnt);
cnt=unique(pp+1,pp+1+cnt)-pp;
rep(i,
1,n)rep(j,i,n)
pd(res);
}
i有乙個n*m的矩陣,問你有多少種放法,使得每一行每一列最多只能放置乙個
想法:對於n*m的矩陣,考慮第一行要不要放,放的話有m個位置,答案轉移為m*dfs(n-1,m-1),即轉化為(n-1)*(m-1)的矩陣的放法。
不放的話答案轉移為dfs(n-1,m),即轉化為(n-1)*m的矩陣的方法。
intn,m;
intd[maxn][maxn];
int dfs(int nn,int
mm)void
solve()
j(不會
k(不會
本來沒想打的,但是無聊啊!敲了3個小時後就敲不出來了,然後就溜啦~
2019長沙學院新生賽題解
題目鏈結 a 打表找規律,發現每四個數就是0,所以找第乙個大於l的四的倍數,找第乙個小於r的四的倍數,然後異或。includeusing namespace std define ll long long int main ll tt 0 y 4 l 4 l,x r r 4 for ll i l i...
2017校賽題解
又是一年一度的校賽,三個人從出題到準備環境花了好幾天的時間。雖然也是蠻累的,期間出了一些小差錯,但總的來說還是蠻成功的 感覺比去年好一些,逃。一共出了7題,但是考慮到比賽時間比較緊張就砍掉了兩題 反正沒砍我的題,對了,關於 teddywang 同學在題面上黑我的情況表示強烈譴責,將在他不注意的時候實...
校賽反思和題解
這次校賽只做出來三道題,而且自己沒做出來一道。雖然拿了銅獎,這有什麼意義呢?這個獎唯一的意義就是告訴我自己還很菜,同樣在集訓隊的大一同學至少是銀獎。我不願意和別人這樣去競爭。所以找找自己的原因吧。首先是自己剛的j題沒有做出來,原因不明。其次是全場最簡單的簽到題卡了讀題。很簡單的模擬沒有搞出來,博弈論...