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 }

 

posted @ 2024-03-24 23:54  伊芙加登  阅读(11)  评论(0编辑  收藏  举报