奖券数目#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int cnt0; for(int i10000;i99999;i) { int ti; int flag1; while(t) { if(t%104) { flag0; break; } t/10; } if(flag) cnt; } printf(%d,cnt); return 0; }星系炸弹日期问题#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int month_day[]{0,31,28,31,30,31,30,31,31,30,31,30,31}; int allday1000,days52; int y0,m0,d0; for(int year2015;year2020;year) { if((year%4000)||(year%40year%100!0)) month_day[2]29; else month_day[2]28; for(int month1;month12;month) { for(int day1;daymonth_day[month];day) { days; if(days1000) { yyear; mmonth; dday; } } } } printf(%d-%02d-%02d,y,m,d); return 0; }三羊献瑞#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { printf(1085); return 0; }移动距离#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int w,m,n; scanf(%d %d %d,w,m,n); int a1,a2,b1,b2; a1(m-1)/w1; a2(n-1)/w1; if(a1%20) { b1w-((mw)%w)1; } else b1((mw)%w); if(a2%20) { b2w-((nw)%w)1; } else b2((nw)%w); int sum0; sumabs(a2-a1)abs(b2-b1); printf(%d,sum); return 0; }生命之树树形DPDFS给定一棵树每个节点有权值可正可负求权值和最大的连通子图子树#include stdio.h #include stdlib.h #include string.h #define MAX 100005 typedef long long ll; const ll INF1e18; //邻接表存储图 typedef struct AdjNode { int v;//邻居节点编号 struct AdjNode *next;//下一个邻居 }AdjNode; typedef struct AdjList { AdjNode *head;//链表头指针 }AdjList; AdjList graph[MAX];//图的邻接表数组 ll val[MAX]; ll dp[MAX]; ll maxsum0; void add(int u,int v) { AdjNode *newnode(AdjNode*)malloc(sizeof(AdjNode)); newnode-vv; newnode-nextgraph[u].head; graph[u].headnewnode; newnode(AdjNode*)malloc(sizeof(AdjNode)); newnode-vu; newnode-nextgraph[v].head; graph[v].headnewnode; } void dfs(int u,int parent) { dp[u]val[u];//初始化为节点自己的权值 AdjNode *pgraph[u].head; while(p!NULL) { int vp-v; if(v!parent)//避免回到父节点 { dfs(v,u);//先递归处理字节点 if(dp[v]0)//如果子节点的贡献为正 { dp[u]dp[v];//就累加到当前节点 } } pp-next; } if(dp[u]maxsum) maxsumdp[u];//更新全局最大值 } void free_graph(int n) { for(int i1;in;i) { AdjNode *pgraph[i].head; while(p!NULL) { AdjNode *tp; pp-next; free(t); } graph[i].headNULL; } } int main(int argc, char *argv[]) { int n; scanf(%d,n); memset(graph,0,sizeof(graph)); for(int i1;in;i) { scanf(%lld,val[i]); } for(int i0;in-1;i) { int u,v; scanf(%d %d,u,v); add(u,v); } dfs(1,-1); printf(%lld,maxsum); free_graph(n); return 0; }
第六届题目
发布时间:2026/5/31 10:05:29
奖券数目#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int cnt0; for(int i10000;i99999;i) { int ti; int flag1; while(t) { if(t%104) { flag0; break; } t/10; } if(flag) cnt; } printf(%d,cnt); return 0; }星系炸弹日期问题#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int month_day[]{0,31,28,31,30,31,30,31,31,30,31,30,31}; int allday1000,days52; int y0,m0,d0; for(int year2015;year2020;year) { if((year%4000)||(year%40year%100!0)) month_day[2]29; else month_day[2]28; for(int month1;month12;month) { for(int day1;daymonth_day[month];day) { days; if(days1000) { yyear; mmonth; dday; } } } } printf(%d-%02d-%02d,y,m,d); return 0; }三羊献瑞#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { printf(1085); return 0; }移动距离#include stdio.h #include stdlib.h int main(int argc, char *argv[]) { int w,m,n; scanf(%d %d %d,w,m,n); int a1,a2,b1,b2; a1(m-1)/w1; a2(n-1)/w1; if(a1%20) { b1w-((mw)%w)1; } else b1((mw)%w); if(a2%20) { b2w-((nw)%w)1; } else b2((nw)%w); int sum0; sumabs(a2-a1)abs(b2-b1); printf(%d,sum); return 0; }生命之树树形DPDFS给定一棵树每个节点有权值可正可负求权值和最大的连通子图子树#include stdio.h #include stdlib.h #include string.h #define MAX 100005 typedef long long ll; const ll INF1e18; //邻接表存储图 typedef struct AdjNode { int v;//邻居节点编号 struct AdjNode *next;//下一个邻居 }AdjNode; typedef struct AdjList { AdjNode *head;//链表头指针 }AdjList; AdjList graph[MAX];//图的邻接表数组 ll val[MAX]; ll dp[MAX]; ll maxsum0; void add(int u,int v) { AdjNode *newnode(AdjNode*)malloc(sizeof(AdjNode)); newnode-vv; newnode-nextgraph[u].head; graph[u].headnewnode; newnode(AdjNode*)malloc(sizeof(AdjNode)); newnode-vu; newnode-nextgraph[v].head; graph[v].headnewnode; } void dfs(int u,int parent) { dp[u]val[u];//初始化为节点自己的权值 AdjNode *pgraph[u].head; while(p!NULL) { int vp-v; if(v!parent)//避免回到父节点 { dfs(v,u);//先递归处理字节点 if(dp[v]0)//如果子节点的贡献为正 { dp[u]dp[v];//就累加到当前节点 } } pp-next; } if(dp[u]maxsum) maxsumdp[u];//更新全局最大值 } void free_graph(int n) { for(int i1;in;i) { AdjNode *pgraph[i].head; while(p!NULL) { AdjNode *tp; pp-next; free(t); } graph[i].headNULL; } } int main(int argc, char *argv[]) { int n; scanf(%d,n); memset(graph,0,sizeof(graph)); for(int i1;in;i) { scanf(%lld,val[i]); } for(int i0;in-1;i) { int u,v; scanf(%d %d,u,v); add(u,v); } dfs(1,-1); printf(%lld,maxsum); free_graph(n); return 0; }