日期统计

cs
#include <stdio.h>
#include <string.h>
int arr[100] = {
5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,
8,3,0,3,7,9,2,
7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,
9,5,6,5,6,1,4,0,1,
0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3
};
int check(const char *date_str)
{
int i=0,j=0;
int len=strlen(date_str);
while(i<100&&j<len)
{
if(arr[i]==date_str[j]-'0') j++;
i++;
}
return j==len;
}
int main() {
int momth_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
int count=0;
char date_str[9];
for(int month=1;month<=12;month++)
{
for(int day=1;day<=momth_day[month-1];day++)
{
sprintf(date_str,"2023%02d%02d",month,day);
if(check(date_str)) count++;
}
}
printf("%d",count);
return 0;
}
01串的熵

cs
#include<stdio.h>
#include<math.h>
int main()
{
double n = 23333333,sum = 0;
int o = 0,l = 0;
for(o = 0;o <= n/2;o++){
sum = 0;
sum -= o*(o / n) * log2(o / n) + (n - o)*((n - o) / n) * log2((n - o) / n);
if(sum > 11625907.5 && sum < 11625907.6){
printf("%d",o);
break;
}
}
return 0;
}
冶练金属

cs
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
int min=0;
int max=INT_MAX;
for(int i=0;i<n;i++)
{
int a,b;
scanf("%d %d",&a,&b);
int lower=a/(b+1)+1;
int upper=a/b;
if(lower>min) min=lower;
if(upper<max) max=upper;
}
printf("%d %d",min,max);
return 0;
飞机降落

cs
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int max(int a,int b)
{
return a>b?a:b;
}
typedef struct
{
int t,d,l;
}Plane;
Plane p[15];
int vis[15];
int flag;
void dfs(int m,int cnt,int last)
{
if(cnt==m)
{
flag=1;
return;
}
for(int i=0;i<m;i++)
{
if(!vis[i]&&(p[i].t+p[i].d)>=last)
{
vis[i]=1;
dfs(m,cnt+1,max(last,p[i].t)+p[i].l);
vis[i]=0;
if(flag) return;
}
}
}
int main(int argc, char *argv[])
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&p[i].t,&p[i].d,&p[i].l);
}
flag=0;
memset(vis,0,sizeof(vis));
dfs(n,0,0);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
接龙数列

cs
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getfirst(int x)
{
while(x>=10)
{
x/=10;
}
return x;
}
int getlast(int x)
{
return x%10;
}
int main(int argc, char *argv[])
{
int n;
scanf("%d",&n);
int dp[10];
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);
int s=getfirst(a);
int e=getlast(a);
int new_len=dp[s]+1;
if(new_len>dp[e]) dp[e]=new_len;
}
int max_len=0;
for(int i=0;i<10;i++)
{
if(dp[i]>max_len) max_len=dp[i];
}
printf("%d",n-max_len);
return 0;
}
子串简写

cs
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 500006
typedef long long ll;
int main(int argc, char *argv[])
{
ll k,i,j,n,sum=0,cnt=0;
char a[N],c1,c2;
scanf("%lld",&k);
scanf("%s %c %c",a,&c1,&c2);
n=strlen(a);
for(i=k-1;i<n;i++)
{
if(a[i-k+1]==c1)
{
cnt++;
}
if(a[i]==c2)
{
sum+=cnt;
}
}
printf("%lld",sum);
return 0;
}