主页
搜索
最近更新
数据统计
申请密钥
系统公告
1
/
1
请查看完所有公告
7.31
最后更新于 2025-07-31 14:17:09
作者
LLC6858
分类
个人记录
复制 Markdown
查看原文
删除文章
更新内容
T638414 营养达标 错误代码: ```cpp #include<bits/stdc++.h> using namespace std; int n,m; int a[105],x[105][105]; int main(){ cin >> n >> m; for(int i = 1;i <= m;i++){ cin >> a[i]; } for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ cin >> x[i][j]; } } for(int i = 1;i <= m;i++){ long long sum = 0; for(int j = 1;j <= n;j++){ sum += x[j][i]; } if(sum <= a[i]){//没有注意应该是 < 而不是 <= cout << "No"; return 0; } } cout << "Yes"; return 0; } ``` 正确代码 ```cpp #include<bits/stdc++.h> using namespace std; int n,m; int a[105],x[105][105]; int main(){ cin >> n >> m; for(int i = 1;i <= m;i++){ cin >> a[i]; } for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ cin >> x[i][j]; } } for(int i = 1;i <= m;i++){ long long sum = 0; for(int j = 1;j <= n;j++){ sum += x[j][i]; } if(sum < a[i]){ cout << "No"; return 0; } } cout << "Yes"; return 0; } ``` T643658 落落的去的数学题1 赛时代码: 直接转换成2进制记录1的数量,只能拿到50分 ```cpp #include<bits/stdc++.h> using namespace std; int a,b,c; long long sum1 = 2,sum2 = 2,sum3 = 2,sum4,ans; string s; void prime(long long x){ while(x){ if(x % 2 == 1) ans++; x /= 2; } return ; } int main(){ cin >> a >> b >> c; sum1=1<<a; sum2=1<<b; sum3=1<<c; sum4 = sum1 + sum2 - sum3; if(sum4 == 0) { cout << 0; return 0; } prime(sum4); cout << ans; return 0; } ``` 正解: 分析:先看样例:\ 3 :0 0 1 1 ->(2的3次方) 8:1 0 0 0\ 2 :0 0 1 0 ->(2的2次方) 4:0 1 0 0\ 1 :0 0 0 1 ->(2的一次) 2:0 0 1 0\ 加起来就是10,也就是1010,有两个1\ 再举个例子:\ 6 5 4 加起来 就是80,转换后就是00101000,1的数量是2 = 5 - 4 + 1\ 所以,加起来后1的数量就是b-c+1 ```cpp #include<bits/stdc++.h> using namespace std; int a,b,c; int main(){ cin >> a >> b >> c; cout << b - c + 1; return 0; } ``` T640726 落落的去的围栏\ 暴力:双重循环枚举,会超时 正解分析: 可以定义一个变量k,并枚举k,把1到k涂成一种颜色,把k+1到n涂成另一种,二分出>=k的颜色数量x和>=n - k的颜色数量y\ 当记录方案数时:\ 如果x = 3,y = 3,那么颜色就是 :1 2 3 和 3 4 5 ,所以方案数需要两变量相乘 ```cpp #include<bits/stdc++.h> using namespace std; long long t,a[200005],ans; int main(){ cin >> t; while(t--){ long long n,m,sum = 0; cin >> n >> m; for(int i = 1;i <= m;i++){ cin >> a[i]; } sort(a + 1,a + m + 1); for(int k = 1;k < n;k++){//因为必须要有两个颜色所以不能取到n long long x = m - (lower_bound(a + 1,a + m + 1,k) - a) + 1; long long y = m - (lower_bound(a + 1,a + m + 1,n - k) - a) + 1; sum += x * y - min(x,y); //相乘 } cout << sum << '\n'; } return 0; } ```
正在渲染内容...
点赞
0
收藏
0