主页
搜索
最近更新
数据统计
申请密钥
系统公告
1
/
1
请查看完所有公告
第五次训练课总结
最后更新于 2025-07-30 23:12:32
作者
huangqianjun
分类
个人记录
复制 Markdown
查看原文
删除文章
更新内容
## B3846 [GESP样题 一级] 闰年求和 这道题就是判断一下一个数到另一个数中闰年的年份合,也就是for循环判断一下是否能被4整除并且不能被100整除或者能被400整除,然后cum+=i,最后输出sum。要注意不包含起始年份和终止年份。 ```cpp #include<bits/stdc++.h> using namespace std; long long n,m,sum; int main(){ cin>>n>>m; for(int i=n+1;i<m;i++){ if((i%4==0&&i%100!=0)||i%400==0){//判断i是否为闰年 sum+=i; } } cout<<sum; return 0; } ``` ## B3678 [语言月赛202211] Gold-Purple-Blue-Green-White 这道题就是判断一下我们精神力是否能带上挂件,就是if判断一下x是否大于a[i],如果大于a[i],x+=b[i],注意每个挂件只需判断一次。 ```cpp #include<bits/stdc++.h> using namespace std; long long n,x,sum,a[100005],b[100005]; int main(){ cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; } for(int i=1;i<=n;i++){//判断是否能带上 if(x>=a[i]){ m+=b[i]; sum++; } } cout<<sum; return 0; } ``` ## P1567 统计天数 这道题用我们判断一下气温一直上升的最长连续天数。所以我们只要判断一下a[i]是否>a[i-1],如果大于那么sum++。注意每天都要求sum最大值。 ```cpp #include<bits/stdc++.h> using namespace std; long long n,m,sum,x[1000005],maxn=-1; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>x[i];//输入 } for(int i=1;i<=n;i++){ if(x[i]>x[i-1]){//判断x[i]是否大于x[i-1] sum++; } else{ sum=1; } maxn=max(maxn,sum);//求maxn和sum的最大值 } cout<<maxn; return 0; } ``` ## P1847 轰炸II 这道题就是求几次轰炸是否炸到了n个关键点,就是求n个关键点是否被轰炸了,是的话s++,ans=j。 ```cpp #include<bits/stdc++.h> using namespace std; struct q{ long long r1,r2,l1,l2; }a[2005]; long long n,m,s,x[2005],y[2005],ans; int main(){ cin>>m>>n; for(int i=1;i<=m;i++){ cin>>a[i].l1>>a[i].r1>>a[i].l2>>a[i].r2;//输入上,左,下,右 } for(int i=1;i<=n;i++){ cin>>x[i]>>y[i]; } for(int i=1;i<=n;i++){ s = 0; ans = 0; for(int j=1;j<=m;j++){//判断n个关键点是否被轰炸了 if(x[i] >= a[j].l1 && x[i] <= a[j].l2 && y[i] >= a[j].r1 && y[i] <= a[j].r2){ s++; ans=j; } } if(s>=1){ cout<<"YES"<<" "<<s<<" "<<ans << endl;//输出 }else{ cout<<"NO" << endl; } } return 0; } ``` ## P2615 [NOIP 2015 提高组] 神奇的幻方 这道题就是让我们求一个n行n列的矩阵,就是判断一下: 若 (K−1) 在第一行但不在最后一列,则将 K 填在最后一行, (K−1) 所在列的右一列; 若 (K−1) 在最后一列但不在第一行,则将 K 填在第一列, (K−1) 所在行的上一行; 若 (K−1) 在第一行最后一列,则将 K 填在 (K−1) 的正下方; 若 (K−1) 既不在第一行,也不在最后一列,如果 (K−1) 的右上方还未填数,则将 K 填在 (K−1) 的右上方,否则将 K 填在 (K−1) 的正下方。 ```cpp #include <bits/stdc++.h> using namespace std; const int N = 45; int a[N][N]; int dx[N * N], dy[N * N]; int main(){ int n; cin >> n; dx[1] = 1, dy[1] = (n + 1) / 2;// 第一个数字填在第一行的正中间 a[dx[1]][dy[1]] = 1; for(int i = 2; i <= n * n; i ++){//判断i if(dx[i - 1] == 1 && dy[i - 1] != n) { dx[i] = n, dy[i] = dy[i - 1] + 1; } else if(dy[i - 1] == n && dx[i - 1] != 1){ dy[i] = 1, dx[i] = dx[i - 1] - 1; } else if(dx[i - 1] == 1 && dy[i - 1] == n){ dx[i] = 2, dy[i] = n; } else{ if(dx[i - 1] != 1 && dy[i - 1] != n && a[dx[i - 1] - 1][dy[i - 1] +1] == 0){ dx[i] = dx[i - 1] - 1, dy[i] = dy[i - 1] + 1; } else{ dx[i] = dx[i - 1] + 1, dy[i] = dy[i - 1]; } } a[dx[i]][dy[i]] = i; } for(int i = 1; i <= n; i ++){//输出 for(int j = 1; j <= n; j ++){ cout << a[i][j] << ' '; } cout << endl; } return 0; } ``` ## P1086 [NOIP 2004 普及组] 花生采摘 这道题就是判断一下我们T秒内能摘最多多少花生,就是我们先去能最多的花生,在时间结束前要回到路边。 ```cpp #include<bits/stdc++.h> using namespace std; struct node{ int x, y, cnt; }a[100005]; int m, n, idx,T; int cmp(node a1,node a2){ return a1.cnt>a2.cnt; } int main(){ cin >> m >> n>> T; for(int i = 1; i <= m; i ++){ for(int j = 1; j <= n; j ++){ int x; cin >> x; ++ idx; a[idx] = {i, j, x}; } } sort(a + 1, a + idx + 1, cmp); //从大到小排序 if(a[1].x * 2 + 1 > T) { cout << 0; } else{ T = T - a[1].x - 1; int px = a[1].x, py = a[1].y; int ans = a[1].cnt; for(int i = 2; i <= idx; i ++){ int dx = abs(px - a[i].x) + abs(py - a[i].y); int back = a[i].x; if(dx + back + 1 > T){// 摘一株花生要走过去还能走回来,摘下花生需要一秒 break; } T = T - dx - 1; ans += a[i].cnt; px = a[i].x, py = a[i].y; } cout << ans;//输出 } return 0; } ```
正在渲染内容...
点赞
0
收藏
0