C++小白训练第一天

张开发
2026/4/4 1:31:26 15 分钟阅读
C++小白训练第一天
小白训练第一天以下为牛客挑战今日收获b1(t0?0:(tB-1)/B) (tB-1)/B这个就是向上取整c默认是向下取整 三目运运算符和向上取整 比较运算1运算2 一个数1就可以判断他的奇偶数性奇数为1偶数为0 find(t.begin(),t.end(),x),去容器中找xfind(...) ! t.end()这样就是没有找到 连续段的题目直接可以用两个参数代替nowans牛客挑战赛85剑客花木兰「SFCOI-4」剑客花木兰输入 4 5 3 1 7 15 101输出 0 1 1 1 0 5 1 32输入 2 5 5 3 20输出 0 1 0 4​ 开始看到这个题目我没有特别去注意这个10的3次方的问题然后就在想别的方法去但是好像都过不了然后我看到10的3次方双层循环不会出事然后直接吗枚举​ 主要思路就是我们枚举A的次数来得到B的次数对体力的和进行比较看看和前一次的大小然后交换次数。但是这个比较值最少要开到1e12来不然就会全部过不了。解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST const int N2e510,M1e310,mod1e97; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,A,B; cinnAB; for(int i0;in;i){ int x; cinx; int max11e12; int a,b; for(int j0;jA;j){ int tx-j*A; int b1(t0?0:(tB-1)/B);//因为要填补完全例如5生命但是中有3所以要补充就是向上取整然后3 和3向上取整还是1 int fj*Ab1*B; if(fmax1){ max1f; aj; bb1; } } couta bendl; } return 0; }序列与变换B-「SFCOI-4」序列与变换_牛客挑战赛85输入 3 6 20 17 24输出 1 1我的第一开始的思路是肯定要求出这个数的等差数列和s然后最少就可以排除一部分数据然后剩下的我们发现到和s的奇偶性有点相同相同的为0因为把 aᵢ 一口气减掉总和s m(m−1)…0 m(m1)/2得到余量r aᵢ − s因为 s 已经把“后面所有减法”一次性做完所以 r 就是“减到最后还剩下的那个数”。而“减偶数”不会翻转最低位“减奇数”才会翻转最低位。所以我们只要看这个和的奇偶性解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST const int N2e510,M1e310,mod1e97; int a[N],b[N],c[N],pre[N]; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int m,n; cinnm; int cout00,cout10; for(int i0;in;i){ cina[i]; } lll s(m1)*(m)/2;//必须开lll不然直接过不了 for(int i0;in;i){ if(a[i]s1){ if((a[i]1)(s1)){ cout0; }else{ cout1; } } } coutcout0 cout1endl; return 0; }牛客周赛 Round 125小苯的选择题小苯的选择题解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST const int N2e510,M1e310,mod1e97; int a[N],b[N],c[N],pre[N]; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string s; string tABD; cins; if(sABD){ cout4endl; }else{ if(sAB||sAD||sBD){ cout2endl; }else{ if(find(t.begin(),t.end(),s[0])!t.end()s.size()1){ cout2endl; } else{ cout0endl; } } } return 0; }小苯的峰值序列B-小苯的峰值序列_牛客周赛 Round 125输入3 5 3 1 4 1 5 6 2 3 1 4 2 3 2 1 1输出3 1 1 1 5 2 2 1 2 2 3 1 1解题思路我们只需要和两边的进行比较直接就可以让后面的直接等于前面的和后面的最大值就行了就相当于是字典序最小了。解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST const int N2e510,M1e310,mod1e97; int a[N],b[N],c[N],pre[N]; void solve(){ int n; cinn; for(int i0;in;i){ cina[i]; } for(int i1;in-1;i){ if(a[i]a[i-1]a[i]a[i1]){ a[i]a[i-1]a[i1]?a[i-1]:a[i1]; } } for(int i0;in;i){ couta[i] ; } coutendl; }; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); TESTS{ solve(); }; return 0; }小苯排雷C-小苯排雷_牛客周赛 Round 125输入2 5 2 0 3 3 4 6 0 0 1 0 0 2输出5 3段中最小值本题的思路是我们只需要管一段的最小值。我们可以用一段之后的零来判断要不要加上单前的最小值最后一个要特判可能遇不到零就是当遇到零时候并且已经有最小值了就相加然后就可以得到解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define INF (int)1e18 #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST const int N2e510,M1e310,mod1e97; int a[N],b[N],c[N],pre[N]; void solve(){ int n; cinn; for(int i0;in;i){ cina[i]; } int ansINF; int sum0; for(int i0;in;i){ if(a[i]0){ if(ans!INF)sumans; ansINF; }else{ ansmin(ans,a[i]); } } if(ans!INF)sumans; coutsumendl; }; signed main(){ std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); TESTS{ solve(); }; return 0; }小苯的01合并D-小苯的01合并_牛客周赛 Round 1252 4 2 0110 00 5 1 11010 0输出YES NO​ 我们的目的是为了可以得到字符串s2进行异或操作我们明白从第一个位置到后面的某一个位置必需要异或和为第二个字母的第一个位置所以我们可以得到​ 特判就是最后一个位置的直接到最后就行了因为最后一个必须要合成最后一位所以我们只需要特别判段一下就可以时间复杂度1n9。解题代码#includebits/stdc.h #define int long long #define lll __uint128_t #define PII pairint ,int #define endl \n using namespace std; #define yn(ans) printf(%s\n, (ans)?Yes:No);//快速打印 #define YN(ans) printf(%s\n, (ans)?YES:NO); #define REP(i, e) for (int i 0; i (e); i) #define REP1(i, s, e) for (int i (s); i (e); i) #define TESTS int t; cin t; while (t--) #define TEST

更多文章