欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 牛客小白月赛101 (A-E)C++ 题解

牛客小白月赛101 (A-E)C++ 题解

2024/10/25 0:28:53 来源:https://blog.csdn.net/ros275229/article/details/142413068  浏览:    关键词:牛客小白月赛101 (A-E)C++ 题解

比赛地址

牛客小白月赛101_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

A . tb的区间问题

每次删掉前面的,后面的,最后剩下连续的n-k个数,答案就是求连续n-k个数的最大和;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair<int,int>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long longconst int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}inline void solve(){int n , k ; cin >> n >> k ;vector<int> a(n) ;for(int& x : a) cin >> x ;int ans = 0 ;int t = n - k ;vector<int> b(n+1,0) ;for(int i=1;i<=n;i++) b[i] = b[i-1] + a[i-1] ;for(int i=t;i<=n;i++) {ans = max(ans,b[i]-b[i-t]) ;}cout << ans << endl ;
}signed main(){IOSint _ = 1;// cin >> _;while(_ --) solve();return 0;
}

B . tb的字符串问题

用一个栈维护就好了,类似括号匹配问题 ;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair<int,int>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long longconst int N = 2e5 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}inline void solve(){int n ; cin >> n ;string s ; cin >> s ;int ans = 0 ;stack<char> st ;for(int i=0;i<n;i++){if(s[i]=='f'){st.push(s[i]) ;}else if(s[i]=='t'){st.push(s[i]) ;}else if(s[i]=='c'){if(!st.empty()&&st.top()=='f'){ans += 2 ;st.pop() ;}else{st.push(s[i]) ;}}else if(s[i]=='b'){if(!st.empty()&&st.top()=='t'){ans += 2 ;st.pop() ;}else{st.push(s[i]) ;}}else{while(!st.empty()) st.pop() ;}}int res = n - ans  ;cout << res << endl ;
}signed main(){IOSint _ = 1;while(_ --) solve();return 0;
}

C . tb的路径问题

数学找规律题,多次打表猜结论就ok ;

对于n>=4 : 都是先走到(2,2),然后再走到离(n,n)最近的2 ;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;//#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair<int,int>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long longconst int N = 1e3 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}int a[N][N] ;inline void solve(){int n ; cin >> n ;
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=n;j++){
//			a[i][j] = gcd(i,j) ;
//			cout << a[i][j] << " " ;
//		}
//		cout << endl ;
//	}if(n==1){cout << 0 << endl ;}else if(n==2){cout << 2 << endl ;}else if(n==3){cout << 4 << endl ;}else{if(n&1) cout << 6 << endl ;else cout << 4 << endl ;}
}signed main(){IOSint _ = 1;// cin >> _ ;while(_ --) solve();return 0;
}

D . tb的平方问题

差分数组 + 前缀和问题

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;#define endl '\n'
typedef long long LL;
#define pb push_back
#define eb emplace_back
#define PII pair<int,int>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define int long longconst int N = 1e3 + 10 ;
const int Mod = 1e9 + 7 ;
// int xx[] = { 1,0,-1,0 };
// int yy[] = { 0,1,0,-1 };LL qmi(LL m, LL k){LL res = 1 % Mod, t = m;while (k){if (k&1) res = res * t % Mod;t = t * t % Mod;k >>= 1;}return res;}bool pd(int x){int t = sqrt(x) ;return t*t==x ;
}inline void solve(){int n , q ; cin >> n >> q ;vector<int> a(n+1) ;for(int i=1;i<=n;i++) cin >> a[i] ;vector<int> b(n+1,0) , c(n+2,0) , d(n+2,0) ; for(int i=1;i<=n;i++) b[i] = b[i-1] + a[i] ;for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){if(pd(b[j]-b[i-1])){c[i]++;c[j+1]-- ;}}}for(int i=1;i<=n+1;i++){d[i] = d[i-1] + c[i] ;}while(q--){int x ; cin >> x ;cout << d[x] << endl ;}return  ;
}signed main(){IOSint _ = 1;// cin >> _ ;while(_ --) solve();return 0;
}

E . tb的数数问题

将没有出现的数,以及它的倍速全删了,最后统计答案即可 ;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;#define endl '\n'
typedef long long LL;
#define all(x) x.begin(), x.end()bool pd(int x){if(x<2) return false ;for(int i=2;i<=x/2;i++){if(x%i==0) return false ;}return true ;
}const int N = 1e6  + 10 ;int b[N] ;inline void solve(){
// 	int n ; cin >> n ;
// 	vector<int> a(n) ;
//     for(int& x : a) cin >> x ;
//     sort(all(a)) ;
//     a.erase(std::unique(all(a)), a.end());
//     int res = 0 ;
//     n = a.size() ;
//     for(int x : a) b[x]++ ;
//     if(a[0]!=1){cout << 0 << endl ;return ;}
//     for(int j=0;j<n;j++){
//         int x = a[j] ; 
//         bool tag = true ;
//         for(int i=1;i<=x/i;i++)
//             if(x%i==0){
//                 if(!b[i]) { tag = false ;break ;}
//                 if(!b[x/i]) { tag = false ;break ;}
//             }
//         if(tag) res++ ;
//     }
//     cout << res << endl ;int n;std::cin >> n ;std::vector<int> vis(1000005, 0), flag(1000005, 0), a(n + 1);bool f = 0;int mx = -1;for (int i = 1; i <= n; i++) {std::cin >> a[i];if (a[i] == 1) {f = 1;}mx = std::max(mx, a[i]);vis[a[i]] = 1;}if (!f) {std::cout << 0;return;}for (int i = 2; i <= mx; i++) {if (!vis[i] && !flag[i]) {for (int j = i * 2; j <= mx; j += i) {vis[j] = 0;flag[j] = 1; }}}int ans = 0;for (int i = 1; i <= mx; i++) {if (vis[i]) {ans++;}}std::cout << ans << '\n';
}signed main(){IOSint _ = 1;while(_ --) solve();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com