1.二进制(简单的二进制加减法,(不清楚为什么当时错了),逆序每位相加并判断是否进位,最后输出即可)
1 #include<bits/stdc++.h>
2 using namespace std;
3 char a[100010],b[100010];
4 int a1[100010],b1[100010];
5 int c[100010];
6 int main(){
7 cin>>a;
8 cin>>b;
9 int len1=strlen(a);
10 int len2=strlen(b);
11 for(int i=len1-1;i>=0;i--){ // 逆转a字符串,将char转换成int
12 a1[len1-i-1]=a[i]-'0';
13 }
14 for(int i=len2-1;i>=0;i--){ // 逆转b字符串,将char转换成int
15 b1[len2-i-1]=b[i]-'0';
16 }
17 for(int i=0;i<max(len1,len2);i++){
18 c[i]=a1[i]+b1[i];
19 }
20 for(int i=0;i<max(len1,len2);i++){
21 if(c[i]>=2){ //进位
22 c[i+1]+=c[i]/2;
23 c[i]%=2;
24 }
25 }
26 int f=0;
27 for(int i=max(len1,len2)+1;i>=0;i--){
28 if(c[i]==0&&f==0) continue; // 如果为前导零就跳过
29 else{
30 cout<<c[i];
31 f=1;
32 }
33 }
34 return 0;
35 }
2.电科A(使用二维数组记录情况,再倒转二维数组,每秒每秒地排序后来统计,并更新最大最小值,同时用前缀和来进行线段覆盖来判断某个题在某时刻并未解决,那么其最小值就为0的特判)
1 #include <bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5 int n, m, t;
6 cin>>n>>m>>t;
7 vector<vector<int>> s(n, vector<int>(m));//当时可能是二维数组爆了
8 for (int i = 0; i < n; i++)
9 for (int j = 0; j < m; j++)
10 cin>>s[i][j];
11 vector<int> mi(t, 1e9), ma(t, 0);
12 vector<int> dis(t, 0);
13 for (int j = 0; j < m; j++)
14 {
15 vector<int> c(n);
16 for (int i = 0; i < n; i++)
17 c[i] = s[i][j] - 1;
18 sort(c.begin(), c.end());
19 int l = 0, las = -1;
20 for (int r = 0; r < n; l = r)
21 {
22 for (; r < n && c[r] == c[l]; r++);
23 mi[c[l]] = min(mi[c[l]], r - l);
24 ma[c[l]] = max(ma[c[l]], r - l);
25 if (las + 1 <= c[l] - 1)//
26 {
27 ++dis[las + 1];
28 --dis[c[l]];
29 }//双指针
30 las = c[l];
31 }
32 if (las < t - 1)
33 ++dis[las + 1];
34 }
35 for (int i = 1; i < t; i++)
36 dis[i] += dis[i - 1];
37 for (int i = 0; i < t; i++)
38 if (dis[i]) dis[i] = 0;//判断是否有题目在某时刻没出现,没出现的话最小值就是0
39 for (int i = 0; i < t; i++)
40 cout<<mi[i]<<" "<<ma[i];
41 return 0;
42 }