- 题解
答案(Day1~4完整版)
- @ 2024-10-5 16:41:08
Day1
T1
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
long long n;
cin>>n;
if(n%2) cout<<(n+1)/2*(n/2);
else cout<<(n/2+1)*(n/2-1);
return 0;
}
T2
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main(){
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
cin>>n;
cin>>s;
long long sum=0;
for(int i=0;i<=s.size()-1;i++){
if(s[i]>='0' && s[i]<='9'){
long long sum2=0;
while(s[i]>='0' && s[i]<='9'){
sum2=sum2*10+s[i]-'0';
i++;
}
sum2+=5;
sum+=sum2;
}
}
cout<<sum;
return 0;
}
T3
#include <bits/stdc++.h>
using namespace std;
int n,a[100010],c[100010];
int m,cnt,mp[450][100010],b[450];
int zh(int x,int y){
if(x==1) return y;
if(x==2) return y*(y-1)/2;
if(x==3) return y*(y-1)*(y-2)/6;
if(x==4) return y*(y-1)*(y-2)*(y-3)/24;
}
int main(){
freopen("wq.in","r",stdin);
freopen("wq.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>n) continue;
c[a[i]]++;
if(c[a[i]]==a[i]) b[++cnt]=a[i];
}
for(int i=1;i<=cnt;i++){
for(int j=1;j<=n;j++){
if(a[j]==b[i]) mp[i][j]=mp[i][j-1]+1;
else mp[i][j]=mp[i][j-1];
}
}
cin>>m;
for(int i=1;i<=m;i++){
int l,r,k,sum=0;
cin>>l>>r>>k;
for(int j=1;j<=cnt;j++){
if(mp[j][r]-mp[j][l-1]>=b[j])
sum++;
}
cout<<zh(k,sum)<<endl;
}
return 0;
}
T4
#include <bits/stdc++.h>
using namespace std;
int n,a,b;
string s;
int pi[1005];
int dp[1005][1005][3][3];
void solve()
{
cin>>n>>a>>b>>s;
s=" "+s;
stack<int>st;
for(int i=1;i<=n;i++)
{
if(s[i]=='(')st.push(i);
else
{
pi[i]=st.top();
pi[st.top()]=i;
st.pop();
}
}
for(int len=2;len<=n;len+=2)
{
for(int l=1,r=len;r<=n;l++,r++)
{
if(s[l]==')' || s[r]=='(')continue;
if(pi[l]==r)
{
if(len==2)
{
dp[l][r][0][0]=0;
dp[l][r][1][1]=a;
dp[l][r][2][2]=b;
}else if(pi[l+1]==r-1)
{
dp[l][r][0][0]=0+max(dp[l+1][r-1][1][1],dp[l+1][r-1][2][2]);
dp[l][r][1][1]=a+max(dp[l+1][r-1][0][0],dp[l+1][r-1][2][2]);
dp[l][r][2][2]=b+max(dp[l+1][r-1][0][0],dp[l+1][r-1][1][1]);
}else
{
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
if(i!=0&&j!=0)dp[l][r][0][0]=max(dp[l][r][0][0],dp[l+1][r-1][i][j]);
if(i!=1&&j!=1)dp[l][r][1][1]=max(dp[l][r][1][1],dp[l+1][r-1][i][j]);
if(i!=2&&j!=2)dp[l][r][2][2]=max(dp[l][r][2][2],dp[l+1][r-1][i][j]);
}
}
dp[l][r][0][0]+=0;
dp[l][r][1][1]+=a;
dp[l][r][2][2]+=b;
}
}else
{
if(pi[l]==pi[r]-1)
{
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
if(i==j)continue;
dp[l][r][i][j]=dp[l][pi[l]][i][i]+dp[pi[r]][r][j][j];
}
}
}else
{
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
for(int t1=0;t1<=2;t1++)
{
if(t1==i)continue;
dp[l][r][i][j]=max(dp[l][r][i][j],dp[l][pi[l]][i][i]+dp[pi[l]+1][r][t1][j]);
}
}
}
}
}
}
}
int mx=0;
for(int i=0;i<=2;i++)
{
for(int j=0;j<=2;j++)
{
mx=max(mx,dp[1][n][i][j]);
}
}
cout<<mx;
}
int main()
{
freopen("bracket.in", "r", stdin);
freopen("bracket.out", "w", stdout);
solve();
return 0;
}
Day2
T1
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct node{
int t;
int v;
};
node a[N];
int n,k;
long long ans;
bool cmp(node a,node b){
return a.v>b.v;
}
int main(){
freopen("coin.in", "r", stdin);
freopen("coin.out", "w", stdout);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i].t;
for(int i=1;i<=n;i++) cin>>a[i].v;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=k;i++){
ans+=a[i].v;
}
cout<<ans;
return 0;
}
T2
#include<bits/stdc++.h>
using namespace std;
long long max;
bool cmp(string a,string b){
return a>b;
}
int f(string a,string b){
int idx=0;
int len=a.size();
for(int i=0;i<len;i++){
if(a[i]!=b[i]){
idx=i;
break;
}
}
return idx+1;
}
int main(){
freopen("mul.in","r",stdin);
freopen("mul.out","w",stdout);
string a,b;
cin>>a>>b;
if(!cmp(a,b)) swap(a,b);
int len=a.size();
int idx=f(a,b);
for(int i=idx;i<len;i++){
if(a[i]>b[i]) swap(a[i],b[i]);
}
long long n=0,m=0;
for(int i=0;i<len;i++){
n=n*10+a[i]-'0';
m=m*10+b[i]-'0';
}
cout<<n*m;
return 0;
}
T3
#include <bits/stdc++.h>
#define int long long
using namespace std;
vector<int> v1;
vector<int> div(vector<int> a, int b){
vector<int> res;
int t=0;
int r=0;
int len=a.size()-1;
for(int i=len;i>=0;i--){
t=r*10+a[i];
res.push_back(t/b);
r=t%b;
}
reverse(res.begin(),res.end());
while(res.size()>1 && res.back()==0) res.pop_back();
return res;
}
signed main(){
freopen("drink.in","r",stdin);
freopen("drink.out","w",stdout);
string n;
cin>>n;
int k;
cin>>k;
int len=n.size();
for(int i=len-1;i>=0;i--)
v1.push_back(n[i]-'0');
auto C=div(v1, k-1);
int len2=C.size();
for(int i=len2-1;i>=0;i--){
cout << C[i];
}
return 0;
}
T4
#include<bits/stdc++.h>
using namespace std ;
int main()
{
freopen("op.in", "r", stdin);
freopen("op.out", "w", stdout);
//std::ios::sync_with_stdio(false) , cin.tie(0) ;
int n , k ;
cin >> n >> k ;
vector<int> p(n + 1 , 0) ;
vector<int> t(n + 1 , 0) ;
vector<int> a(n + 1 , 0) ;
vector<int> b(n + 1 , 0) ;
for(int i = 1 ; i <= n ; i ++) cin >> p[i] ;
for(int i = 1 ; i <= n ; i ++) cin >> t[i] ;
for(int i = 1 ; i <= n ; i ++) cin >> a[i] ;
for(int i = 1 ; i <= n ; i ++) cin >> b[i] ;
vector<int> id(n + 1 , 0) ;
for(int i = 1 ; i <= n ; i ++) id[i] = i ;
sort(id.begin() + 1 , id.end() , [&](int x , int y)
{
return p[x] < p[y] ;
}) ;
set<pair<int , int>> s ;
s.insert({1 , k}) ;
long long res = 0 ;
for(int i = 1 ; i <= n ; i ++)
{
int c = id[i] ;
if(s.empty()) break ;
auto it = s.lower_bound({t[c] , 0}) ;
auto it2 = it ;
if(it2 != s.begin()) it2 -- ;
if(it2 -> first <= t[c] && t[c] <= it2 -> second) it = it2 ;
if(it != s.end())
{
t[c] = max(t[c] , it -> first) ;
if(t[c] <= it -> second)
{
if(it -> first < t[c])
{
int l = it -> first ;
int r = it -> second ;
s.erase({l , r}) ;
s.insert({l , t[c] - 1}) ;
s.insert({t[c] , r}) ;
it = s.lower_bound({t[c] , 0}) ;
}
vector<pair<int , int>> v ;
while(it != s.end())
{
int l = it -> first ;
int r = it -> second ;
if(r - l + 1 >= b[c])
{
res += a[c] ;
s.erase(it) ;
if(r - l + 1 > b[c]) s.insert({l + b[c] , r}) ;
break ;
}
else
{
v.push_back({l , r}) ;
it ++ ;
}
}
for(auto now : v) s.erase(now) ;
}
}
}
cout << res ;
return 0 ;
}
Day3
T1
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
bool cmp(int a,int b){
return a<b;
}
int main(){
freopen("divmod.in", "r", stdin);
freopen("divmod.out", "w", stdout);
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
if(k==1){
if(n==1){
cout<<a[1];
return 0;
}
sort(a+1,a+1+n,cmp);
long long sum=0;
for(int i=2;i<=n;i++){
sum+=a[i];
}
long long ans=sum-a[1];
cout<<ans;
}
else{
if(n==1){
cout<<a[1];
return 0;
}
sort(a+1,a+1+n);
long long sum=a[1];
for(int i=2;i<=n;i++){
sum=sum%a[i];
}
cout<<sum;
}
return 0;
}
T2
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
bool flag[N];
int main(){
freopen("hw.in", "r", stdin);
freopen("hw.out", "w", stdout);
string s;
cin>>s;
s=' '+s;
int len=s.size()-1;
int cnt=0;
for(int i=1;i<=len/2;i++){
if(s[i]!=s[len-i+1]){
char ch=min(s[i],s[len-i+1]);
s[i]=ch;
s[len-i+1]=ch;
flag[i]=true;
cnt++;
}
}
for(int i=1;i<=len/2;i++){
if(cnt==2) break;
if(flag[i] && cnt<2 && s[i]!='a'){
s[i]='a';
s[len-i+1]='a';
cnt+=1;
}else if(cnt==0 && s[i]!='a'){
s[i]='a';
s[len-i+1]='a';
cnt+=2;
}
}
if(cnt<=1 && len%2==1){
s[len/2+1]='a';
}
cout<<s.substr(1);
return 0;
}
T3
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
bool b[2000010];
long long n,cnt;
void f(){
for(int i=2;i<=2000000;i++){
if(b[i]) continue;
for(int j=2*i;j<=2000000;j+=i){
b[j]=1;
}
}
return ;
}
int main(){
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
cin>>n;
f();
for(int i=1;i<=n;i++){
cin>>a[i];
}
long long u,v;
for(int i=1;i<n;i++){
cin>>u>>v;
if(b[a[u]+a[v]]){
cnt++;
}
}
cout<<n-1-cnt;
return 0;
}
T4
#include<bits/stdc++.h>
using namespace std;
long long n, f[10], tmp, ans=0;
int main(){
freopen("div.in", "r", stdin);
freopen("div.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> tmp;
for(int j = 1; j <= 5; j++)
f[j] += ((tmp / j) > (tmp % j) && (tmp/1000000 <= j));
}
for(int i = 1; i <= 5; i++) ans = max(ans, f[i]);
cout << ans;
return 0;
}
Day4
T1
#include<bits/stdc++.h>
using namespace std;
const int N=3e3+5;
int n,l,r,k;
int a[N];
int main(){
freopen("mod.in", "r", stdin);
freopen("mod.out", "w", stdout);
cin>>n>>l>>r;
for(int i=1;i<=n;i++) cin>>a[i];
int minn=2e7;
for(int i=l;i<=r;i++){
int sum=0;
for(int j=1;j<=n;j++){
sum+=a[j]%i;
}
if(sum<minn){
k=i;
minn=sum;
}
}
cout<<k;
return 0;
}
T2
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int q[10] = {1, 10, 5, 10, 5, 2, 5, 10, 5, 10};
int t, k[N];
long long a[N];
int main() {
freopen("mul.in", "r", stdin);
freopen("mul.out", "w", stdout);
cin >> t;
for (int i = 1; i <= t; i++) {
cin >> a[i] >> k[i];
long long n = 0, m = 0, ans = 1;
while (a[i] % 10 == 0) {
a[i] /= 10;
m ++;
}
n = a[i] % 10;
if (m >= k[i]) {
cout << 1 << endl;
continue;
}
while (m < k[i]) {
ans *= q[n];
a[i] *= q[n];
n = (a[i] / 10) % 10;
a[i] /= 10;
m++;
}
cout << ans << endl;
}
return 0;
}
T3
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,q,cnt[N][30],book[N],res;
char c[N];
void dfs(int i){
if(2*i<=n){
dfs(i*2);
for(int j=0;j<26;j++) cnt[i][j]+=cnt[2*i][j];
}
if(2*i+1<=n){
dfs(i*2+1);
for(int j=0;j<26;j++) cnt[i][j]+=cnt[2*i+1][j];
}
cnt[i][c[i]-'a']++;
int temp=0;
for(int j=0;j<26;j++) temp+=(cnt[i][j]%2);
if(temp<=1){
res++;
book[i]=1;
}
}
void up(int i,char now,char old){
while(i){
cnt[i][old-'a']--;
cnt[i][now-'a']++;
int temp=0;
for(int j=0;j<26;j++) temp+=(cnt[i][j]%2);
if(temp<=1){
if(!book[i]) res++;
book[i]=1;
}else{
if(book[i]) res--;
book[i]=0;
}
i/=2;
}
}
int main(){
freopen("tree.in", "r", stdin);
freopen("tree.out", "w", stdout);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>c[i];
dfs(1);
cout<<res<<endl;
while(q--){
int x;
char ch;
cin>>x>>ch;
up(x,ch,c[x]);
c[x]=ch;
cout<<res<<endl;
}
return 0;
}
T4
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int a[N];
int n,t;
signed main(){
freopen("gz.in", "r", stdin);
freopen("gz.out", "w", stdout);
cin>>n;
long long sum=n*(n-1)/4;
for(int i=1;i<=n;i++){
if(sum>=n-i){
a[i]=i;
sum-=n-i;
}else{
a[i]=n-sum;
t=i+1;
break;
}
}
for(int i=t,x=n;i<=n;i++,x--){
if(x==n-sum) x--;
a[i]=x;
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
1 条评论
-
zhaowenmo LV 4 @ 2024-10-5 16:47:46建议你在每一个```改成```cpp
- 1