A
给你一个时间
问到最近的 回文的时间 模拟
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<queue> #include<set> #include<map> using namespace std; #define ll __int64 #define inf 1e15+7 #define MAXN 200010 #define exp 1e-4 int main() { int n,m; while(scanf("%d:%d",&n,&m)!=EOF) { int cnt=0; while(1) { int a=n/10; int b=n%10; int c=m/10; int d=m%10; if(b==c&&a==d) break; m++; if(m==60) { m=0; n++; } if(n==24) n=0; cnt++; } printf("%d ",cnt); } return 0; }
B
n k q
n种咖啡 然后每个的温度范围
然后有q个查询求 li ri 求这个温度范围内有多少温度 满足 数目 >=k
没遇到过的前缀和
cnt[li]++ cnt[ri+1]--;
然后n求前缀和
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<queue> #include<set> #include<map> using namespace std; #define ll __int64 #define inf 1e15+7 #define MAXN 200010 #define exp 1e-4 int cnt[MAXN]; int sum[MAXN]; int main() { int n,k,q; while(scanf("%d%d%d",&n,&k,&q)!=EOF) { memset(cnt,0,sizeof(cnt)); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { int l,r; scanf("%d%d",&l,&r); cnt[l]++; cnt[r+1]--; } for(int i=1;i<=200000;i++) { cnt[i]=cnt[i-1]+cnt[i]; if(cnt[i]>=k) sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; } for(int i=1;i<=q;i++) { int l,r; scanf("%d%d",&l,&r); printf("%d ",sum[r]-sum[l-1]); } } return 0; }
C
n *m矩阵
每次可以有1种操作
1 给一行加一
2 给一列加一
从 0 开始变到给你的矩阵
然后步数要最少
统计行和列的最小的 1 先行 2 先列 步数可能不一样 当列里面统计出来最小的>=1那么行都要减去这个数
1 1 1
1 1 1
1 1 1 x[1] 1 y[1] 1
x[2] 1 y[2] 1
x[3] 1 y[3] 1 那么y都要减去1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<queue> #include<set> #include<map> using namespace std; #define ll __int64 #define inf 1e15+7 #define MAXN 110 #define exp 1e-4 int x[MAXN],y[MAXN],x1[MAXN],y2[MAXN]; int z[MAXN][MAXN],z1[MAXN][MAXN]; char s1[50010][10],s2[50010][10]; int ind[50010],ind1[50010]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) { int mi=inf; for(int j=1;j<=m;j++) { scanf("%d",&z[i][j]); z1[i][j]=z[i][j]; mi=min(mi,z[i][j]); } x[i]=mi; x1[i]=mi; } for(int i=1;i<=m;i++) { int mi=inf; for(int j=1;j<=n;j++) mi=min(mi,z[j][i]); y[i]=mi; y2[i]=mi; } int ok=0; int cnt=0; int cnt1=0; int mi=inf; for(int i=1;i<=n;i++) mi=min(mi,x[i]); for(int i=1;i<=m;i++) y[i]-=mi; mi=inf; for(int i=1;i<=m;i++) mi=min(mi,y2[i]); for(int i=1;i<=n;i++) x1[i]-=mi; for(int i=1;i<=n;i++) { if(x[i]>0) { for(int j=1;j<=m;j++) z[i][j]-=x[i]; while(x[i]>0) { strcpy(s1[cnt],"row"); ind[cnt]=i; cnt++; x[i]--; } } } for(int i=1;i<=n;i++) { if(x1[i]>0) { for(int j=1;j<=m;j++) z1[i][j]-=x1[i]; while(x1[i]>0) { strcpy(s2[cnt1],"row"); ind1[cnt1]=i; cnt1++; x1[i]--; } } } for(int i=1;i<=m;i++) { if(y[i]>0) { for(int j=1;j<=n;j++) z[j][i]-=y[i]; while(y[i]>0) { strcpy(s1[cnt],"col"); ind[cnt]=i; cnt++; y[i]--; } } } for(int i=1;i<=m;i++) { if(y1[i]>0) { for(int j=1;j<=n;j++) z1[j][i]-=y2[i]; while(y2[i]>0) { strcpy(s2[cnt1],"col"); ind1[cnt1]=i; cnt1++; y2[i]--; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) if(z[i][j]) ok=1; } if(ok==1) printf("-1 "); else { if(cnt<cnt1) { printf("%d ",cnt); for(int i=0;i<cnt;i++) printf("%s %d ",s1[i],ind[i]); } else { printf("%d ",cnt1); for(int i=0;i<cnt1;i++) printf("%s %d ",s2[i],ind1[i]); } } } return 0; }