2024-3-3-466-回文日期.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
const int N = 10010;

int day1,day2,res,days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int date)
{int year=date/10000;
int mouth=date%10000/100;
int day=date%100;
if(mouth==0||mouth>12)return false;
if(day==0||mouth!=2&&day>days[mouth]) return false;
int leap=year%100&&year%4==0||year%400==0;//注意闰年判断条件
if(mouth==2){
if(day>28+leap) return false;
}
return true;
}
int main()
{
cin>>day1>>day2;
int rea=0;
for(int i=1000;i<10000;i++)
{
int date=i,x=i;
for(int j=0;j<4;j++)
date=date*10+x%10,x/=10;
if(day1<=date&&day2>=date&&check(date))res++;
}
cout<<res;
return 0;
}

2024-3-3-1245- 特别数的和.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
#include <algorithm>
#include<cstdio>
int n,res;
using namespace std;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{int j=i;
while(j)
{
int cnt=j%10;
j=j/10;
if(cnt==2||cnt==0||cnt==1||cnt==9)
{res+=i;break;}
}
}
cout<<res;
return 0;
}

2024-3-3-1204- 错误票据.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
const int N = 10010;
int n,a[N];int res1,res2;
int main()
{
int cnt;
cin>>cnt;
string line;
getline(cin,line);//忽略第一行回车
while (cnt -- )
{
getline(cin,line);
stringstream ssin(line);
while(ssin>>a[n])n++;
}
sort(a,a+n);

for (int i = 1; i < n; i ++ )
{
if(a[i]==a[i-1])res2=a[i];
else if(a[i]>=a[i-1]+2) res1=a[i]-1;
}
cout<<res1<<" "<<res2;
}

2024-3-2-562-壁画.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstring>
#include <algorithm>
#include<cstdio>
using namespace std;
const int N = 1e7;
int s[N],n;
char a[N];
int T;


int main()
{
cin>>T;
for(int x=1;x<=T;x++)
{ cin>>n;
cin>>a;
int ans=0;
for(int i=1;i<=n;i++) s[i]=a[i-1]+s[i-1]-'0';

int m=(n+1)/2;
for(int j=m;j<=n;j++)
ans=max(ans,s[j]-s[j-m]);
cout<<"Case #"<<x<<": "<<ans<<endl;
}

return 0;
}

2024-3-2-4262-空调.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <cstring>
#include <algorithm>
#include<cstdio>
const int N = 1e5+10;
int a[N],b[N];
int n;

using namespace std;
void batch_add(int l,int r,int c){//创建差分数组
b[l]+=c,b[r+1]-=c;
cout<<b[l]<<" "<<b[r+1]<<endl;
}

int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
int t;cin>>t;
a[i]-=t;
}
for(int i=1;i<=n;i++)batch_add(i,i,a[i]);
int s=0,t=0;
for(int i=1;i<=n;i++){
if(b[i]>0)s+=b[i];
else if(b[i]<0)t-=b[i];
}

cout<<max(s,t);

return 0;
}



2024-3-2-1236-递增三元组.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstring>
#include <algorithm>
#include<cstdio>
using namespace std;
const int N = 100010;
int cnt[N],as[N],cs[N];//as[i]表示在a[]中有多少数小于b[i]
int a[N],b[N],c[N],s[N],n;//cs[i]表示在c[]中有多少数大于b[i]


int main()
{ cin>>n;
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]),a[i]++;
for (int i = 0; i < n; i ++ ) scanf("%d", &b[i]),b[i]++;
for (int i = 0; i < n; i ++ ) scanf("%d", &c[i]),c[i]++;

for(int i=0;i<n;i++)cnt[a[i]]++;
for (int i = 1; i <N; i ++ )s[i]=s[i-1]+cnt[i];
for (int i = 0; i < n; i ++ ) as[i]=s[b[i]-1];

//求cs[]
memset(cnt, 0, sizeof cnt);memset(s,0,sizeof s);
for(int i=0;i<n;i++)cnt[c[i]]++;
for(int i=1;i<N;i++)s[i]=s[i-1]+cnt[i];
for(int i=0;i<n;i++)cs[i]=s[N-1]-s[b[i]];

long long res=0;
for(int i=0;i<n;i++) res+=(long long)as[i]*cs[i];/*错误实例res+=
(long long)(as[i]*cs[i]);不需要加括号*/
cout<<res<<endl;
return 0;

}


2024-3-2-1214-波动数列.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010,MOD=100000007;
int f[N][N];
int n,s,a,b;
int get_mod(int a,int b)
{
return (a%b+b)%b;
}
int main()
{ scanf("%d%d%d%d", &n, &s, &a, &b);
f[0][0]=1;
for(int i=1;i<n;i++)
for(int j=0;j<n;j++)
{//注意,f[i][j] 代表第i位,取i个a或-b,模n为j的个数;
f[i][j]=(f[i-1][get_mod(j-a*(n-i),n)]+f[i-1][get_mod(j+b*(n-i),n)])%MOD;//题解https://www.cnblogs.com/onlyblues/p/15907623.html

}
cout<<f[n-1][get_mod(s,n)]<<endl;
return 0;
}

2024-3-2-1210-连号区间数.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10010;
int a[N];
int n,res;
int main()
{
cin>>n;
for (int i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
}
for (int i = 0; i < n; ++i)
{
int manx=-N,minx=N;
for (int j = i; j <n ; ++j)
{
manx=max(manx,a[j]);
minx=min(minx,a[j]);
if(manx-minx==j-i) res++;
}
}
cout<<res;


return 0;
}

2024-3-1-895-最长上升子序列.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5005;
int a[N],f[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int res=0;
for(int i=1;i<=n;i++)
{ f[i]=1;
for(int j=1;j<i;j++)
{
if(a[i]>a[j])
f[i]=max(f[i],f[j]+1);
res=max(res,f[i]);
}
}
cout<<res;
return 0;
}


2024-3-1-1212- 地宫取宝.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 55;
int MOD=1000000007;
int n,m,k;
int w[N][N];
int f[N][N][13][14];



int main()
{

cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>w[i][j];
w[i][j]++;
}
f[1][1][1][w[1][1]]=1;
f[1][1][0][0]=1;
for(int i = 1; i <= n; i ++ )
for(int j= 1; j <= m; j ++ )
{if(i==1||j==1) continue;
for(int u = 0;u<= k; u ++ )
for(int v = 0; v <= 13; v ++ )
{
int &val=f[i][j][u][v];
val=(val+f[i-1][j][u][v])%MOD;
val=(val+f[i][j-1][u][v])%MOD;
if(u>0&&v==w[i][j])
{
for(int c=0;c<v;c++)
{
val=(val+f[i-1][j][u-1][c])%MOD;
val=(val+f[i][j-1][u-1][c]%MOD);
}
}
}
}

int res=0;
for (int i = 0; i < 13; i ++ ) res=(res+f[n][m][k][i])%MOD;
cout<<res;



return 0;
}

0%