hodgepodge
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 }