目录
A.while
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
string t="while";
void solve(){
string s;
cin>>s;
int res=0;
for(int i=0;i<s.size();i++){
if(t[i]!=s[i]) res++; //比较不同的,++
}
cout<<res<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
B.token
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 1e5+7;
int a[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int sum=0;
if(n<=10){ //n小于等于10,所有ai之和为最优解
for(int i=1;i<=n;i++){
sum+=a[i];
}
}else{
for(int i=10;i<=n;i++){ //每10位进行一次计算
int tmp=0;
for(int j=i-9;j<=i;j++){
tmp+=a[j];
}
sum=max(sum,tmp);
}
}
cout<<sum<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
C.小苯的逆序对和
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 2e5+7;
int a[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int res=0,l=a[1]; //l记录ai
for(int j=2;j<=n;j++){ //枚举aj
if(l>a[j]){ //ai>aj
res=max(res,l+a[j]); //更新最大结果
}else{
l=max(l,a[j]); //更新最大aj
}
}
cout<<res<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
cin>>_;
while(_--){
solve();
}
return 0;
}
D.数组4.0
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
void solve(){
int n;
cin>>n;
unordered_map<int, int> mp;
for(int i=0;i<n;i++){
int x;cin>>x;
mp[x]++;
}
vector<int> a; //记录出现的数(已去重)
for(auto& p : mp) a.push_back(p.first);
sort(a.begin(),a.end()); //排序
int res = 0, m = a.size();
int l = a[0], tmp = mp[l];
bool f = false;
for (int i = 1; i < m; i++) {
if(a[i]==l+1) f = true; //连续
else{ //不连续
if (!f) res += tmp; //上一步不连通,要保整上一步所有的值与当前值连通
else res += 1; //上一步连通,只需加一条边保持连通
tmp = mp[a[i]];
f = false;
}
l=a[i];
}
if(!f) res += tmp; //考虑最后值的连通情况
else res += 1;
cout << res - 1 << endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
cin>>_;
while(_--){
solve();
}
return 0;
}
E.小苯的矩阵反转
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
void solve(){
int n,m;
cin>>n>>m;
vector<int> r(n+1,0),c(m+1,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char x;
cin>>x;
r[i]+=(x=='1'); //每行1的数量
c[j]+=(x=='1'); //每列1的数量
}
}
unordered_map<int,int> mpr,mpc;
for(int i=1;i<=n;i++){
mpr[r[i]]++;
}
for(int i=1;i<=m;i++){
mpc[c[i]]++;
}
if(mpr[0]==n //(相同行或相同列)每行1出现数量为0的行数为n,YES
//(不同的两行)每行1出现数量为0的行数为n-2,每行1出现数量为m的行数为2,YES
||(mpr[0]==n-2&&mpr[m]==2)
//(不同的两列)每列1出现数量为0的列数为m-2,每列1出现数量为n的列数为2,YES
||(mpc[0]==m-2&&mpc[n]==2)
/*(一行一列)每行1出现数量为1的行数为n-1,每行1出现数量为m-1的行数为1,
每列1出现数量为1的列数为m-1,每列1出现数量为n-1的列数为1,YES*/
||(mpr[1]==n-1&&mpr[m-1]==1&&mpc[1]==m-1&&mpc[n-1]==1)
) cout<<"YES"<<endl;
else cout<<"NO"<<endl; //其余情况为NO
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
cin>>_;
while(_--){
solve();
}
return 0;
}
F.小苯的因子查询
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int MOD = 998244353;
const int MAX_N = 1e6;
/*
(n!可以表示为2^v2 * m,其中m是奇数。
那么n!的因子总数是(v2 + 1) * t,其中t是m的因子个数。
而奇数因子的个数就是t。所以概率就是 t / [(v2 +1)*t] = 1/(v2 +1)
。哦,对,这样概率就是1/(v2 +1)。那现在问题转化为计算v2 +1)
*/
vector<int> init() { //预处理每个n的v2+1
vector<int> v(MAX_N + 1, 0);
for (int n = 1; n <= MAX_N; ++n) {
int cnt = 0;
int x = n;
while (x) {
cnt += x / 2;
x /= 2;
}
v[n] = cnt + 1;
}
return v;
}
// 快速幂求逆元
int mod_pow(int base, int exp, int mod) {
int result = 1;
base %= mod;
while (exp > 0) {
if (exp % 2 == 1) {
result = (result * base) % mod;
}
base = (base * base) % mod;
exp /= 2;
}
return result;
}
void solve(){
vector<int> v = init();
int T;
cin >> T;
vector<int> a(T);
for (int i = 0; i < T; ++i) {
cin >> a[i];
}
for (int i = 0; i < T; ++i) {
int n = a[i];
int inv = mod_pow(v[n], MOD - 2, MOD); //求逆元
cout << inv << " ";
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
800

被折叠的 条评论
为什么被折叠?



