觉得浮夸了四年,漠然发现原来是浮躁了四年!

省赛集锦

第三届:

C:网络的可靠性 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=170

这题虽然WA了几次,但还是很高兴的毕竟是完全是自己开发的。‘嘎嘎’

这题感觉比较实在,接近实际问题不错。

做的时候分析一些实例,然后得出结论就OK了。

Key:   分析几个问题后,会发现当一个基站的连接的光纤数为三时,就要注意这个基站了,总的来说这个规律不算难找。

复制代码
View Code
 1  
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 int num[10005];
 7 int main()
 8 {
 9     int n;
10     int i;
11     int a,b;
12     while(scanf("%d",&n)!=EOF)
13     {
14         memset(num,0,sizeof(num));
15         
16         for(i=1;i<n;i++)
17         {
18             cin>>a>>b;
19             num[a]++;
20             num[b]++;
21         }
22          if(n==1||n==2)
23         {
24             cout<<0<<endl;
25             continue;
26         }
27         int ans=0;
28         for(i=1;i<=n;i++)
29         {
30             if(num[i]>2)
31                 ans++;
32         }
33         if(ans>1)
34             ans=(ans+1)/2;
35         ans++;
36         cout<<ans<<endl;
37     }
38     return 0;
39 }
40     
41     
42         
复制代码

 

D:聪明的KK   http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=171

这一题深深的伤着我的心啊!这一题也体现了菜鸟、老鸟、和大牛的差别。

此题,我一上来就是一阵猛搜啊,还是优先的,搜的是浑天暗地啊!可惜WA如影随形!

最后看讨论版上竟然说是dp,若有所思,网上搜了一个看了一下比照着AC了。

 

 

复制代码
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int n,m;
 5 int map[25][25];
 6 int dp[25][25];
 7 int max(int a,int b)
 8 {
 9     return a>b?a:b;
10 }
11 int main()
12 {
13     int i,j;
14     while(cin>>n>>m)
15     {
16         for(i=0;i<n;i++)
17             for(j=0;j<m;j++)
18             cin>>map[i][j];
19             memset(dp,0,sizeof(dp));
20             for(i=1;i<=n;i++)
21                 for(j=1;j<=m;j++)
22                 {
23                     dp[i][j]=max(dp[i][j-1]+map[i-1][j-1],dp[i-1][j]+map[i-1][j-1]);
24                 }
25             cout<<dp[n][m]<<endl;
26     }
27     return 0;
28 }
复制代码


可是一提交,好奇看了看推荐的优秀代码,顿时感觉自己弱爆了。

 

 

复制代码
View Code
 1  
 2 #include<iostream>
 3 using namespace std;
 4 int f[22][22];
 5 int main()
 6 {
 7     int n,m,c;
 8     cin>>m>>n;
 9     for(int i=1;i<=m;i++)
10         for(int j=1;j<=n;j++)
11         {
12             cin>>c;
13             f[i][j]=max(f[i][j-1],f[i-1][j])+c;
14         }
15     cout<<f[m][n]<<endl;
16 }        
复制代码

 

 F: buying feed http://acm.nyist.net/JudgeOnline/problem.php?pid=248

贪心吧!只不过写的比较慢!

复制代码
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 struct node{
 7     int x,f,c,j;
 8 }s[150];
 9 bool cmp(node a,node b)
10 {
11     return a.j<b.j;
12 }
13 
14 int main()
15 {
16     int t;
17     while(scanf("%d",&t)!=EOF)
18     {
19         while(t--){
20         int k,e,n;
21         scanf("%d%d%d",&k,&e,&n);
22         int i;
23         for(i=0;i<n;i++)
24         {
25             scanf("%d%d%d",&s[i].x,&s[i].f,&s[i].c);
26             s[i].j=e-s[i].x+s[i].c;
27         }
28 
29         sort(s,s+n,cmp);
30 
31         int sum=0;
32         i=0;
33         while(k>=1)
34         {
35               if(k>=s[i].f)
36               {
37                   sum+=s[i].f*s[i].j;
38                   k-=s[i].f;
39                   i++;
40               }
41               else
42               {
43                   sum+=s[i].j*k;
44                   k=0;
45               }
46         }
47         printf("%d\n",sum);
48         }
49     }
50     return 0;
51 }
复制代码

 

 G: Amazing Auction  http://acm.nyist.net/JudgeOnline/problem.php?pid=251

题目不难,比较烦,写的较慢啊!当务之急是刷题提速啊!

复制代码
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7 int u,m;
 8 struct node{
 9     string name;
10     int price;
11 }s[105];
12 bool cmp(node a,node b)
13 {
14     return a.price<b.price;
15 }
16 int main()
17 {
18     int i,j;
19     while(scanf("%d%d",&u,&m)!=EOF)
20     {
21         for(i=0;i<m;i++)
22             cin>>s[i].name>>s[i].price;
23         int flag=0;
24         for(i=0;i<m-1;i++)
25         {
26             if(s[i].name.compare(s[i+1].name)!=0)
27             {
28                 flag=1;
29                 break;
30             }
31         }
32         if(flag==0)
33         {
34             sort(s,s+m,cmp);
35             cout<<"The winner is "<<s[0].name<<endl;
36             printf("The price is %d\n",s[0].price);
37         }
38         else
39         {
40             int num[1005];
41             memset(num,0,sizeof(num));
42             for(i=0;i<m;i++)
43             {
44                 num[s[i].price]++;
45             }
46             int min=1000;
47             int mark;
48             for(i=0;i<=1005;i++)
49             {
50                 if(min>num[i]&&num[i]!=0)
51                 {
52                     min=num[i];
53                     mark=i;
54                 }
55             }
56 
57             for(i=0;i<m;i++)
58             {
59                 if(s[i].price==mark)
60                 {
61                     cout<<"The winner is "<<s[i].name<<endl;
62                     cout<<"The price is "<<mark<<endl;
63 
64                     break;
65                 }
66             }
67 
68 
69 
70         }
71 
72     }
73   return 0;
74 }
复制代码

 

 

 

 

 第四届:(最有水平的一届吧!呵呵)

C:表达式求值http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=305

递归!吾等菜鸟对递归的实现是不是还很生疏啊!有木有?

真是看懂递归恍然大悟,实现递归很有困难,大概这个思想还不是很能熟悉的驾驭吧!

复制代码
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int n;
 6 char str[333];
 7 int p;
 8 int min(int x,int y)
 9 {
10     return x<y?x:y;
11 }
12 int max(int x,int y)
13 {
14     return x>y?x:y;
15 }
16 int add(int x,int y)
17 {
18     return x+y;
19 }
20 int fac()
21 {
22     int num,i;
23     switch(str[p])
24     {
25     case'm':p+=3;if(str[p-2]=='i') return min(fac(),fac());else return max(fac(),fac());break;
26     case'a':p+=3; return add(fac(),fac());
27     case'(':
28     case')':
29     case',': p++; return fac();
30     default:sscanf(str+p,"%d%n",&num,&i);p+=i; return num;
31     }
32 
33 }
34 int main()
35 {
36     cin>>n;
37     while(n--)
38     {
39         cin>>str;
40         p=0;
41         cout<<fac()<<endl;
42     }
43     return 0;
44 }
复制代码

D:走迷宫 http://acm.nyist.net/JudgeOnline/problem.php?pid=306

好吧!这样的迷宫菜鸟实在是没见过!无奈,无奈!

只好,比这学长的代码敲一遍了!           @zzuli   郑勇学长http://pictureyong.blog.163.com/blog/#m=0

领悟ing。。。。。。

复制代码
View Code
 1 //二分  枚举上下界 + DFS
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 int n;
 7 int map[105][105];
 8 int mark[105][105];
 9 int MAX,MIN;
10 int R,L,flag;
11 int dir[4][2]={0,1,1,0,0,-1,-1,0};
12 void DFS(int x,int y)
13 {
14     int xx,yy,i;
15     if(flag)  return;
16     mark[x][y]=1;
17     if(map[x][y]<L||map[x][y]>R)
18         return ;
19     if(x==n&&y==n)
20     {
21         flag=1;return ;
22     }
23     for(i=0;i<4;i++)
24     {
25         xx=x+dir[i][0];
26         yy=y+dir[i][1];
27         if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&mark[xx][yy]==0)
28         {
29             DFS(xx,yy);
30         }
31     }
32 }
33 
34     
35 int main()
36 {
37     while(scanf("%d",&n)!=EOF)
38     {
39         int i,j;
40         memset(map,0,sizeof(map));
41         MAX=-1;MIN=10000;
42         for(i=1;i<=n;i++)
43             for(j=1;j<=n;j++)
44             {
45                 cin>>map[i][j];
46                 if(MAX<map[i][j])
47                     MAX=map[i][j];
48                 if(MIN>map[i][j])
49                     MIN=map[i][j];
50             }
51             int height,mid,low;//二分
52             height=MAX-MIN;
53             low=0;
54             while(height>=low)
55             {
56                 mid=(low+height)/2;
57                 for(i=MIN;i<=MAX-mid;i++)
58                 {
59                     R=i+mid;L=i;flag=0;
60                     memset(mark,0,sizeof(mark));
61                     DFS(1,1);
62                     if(flag)
63                     {
64                         break;
65                     }
66                 }
67                 if(i<=MAX-mid)  height=mid-1;
68                 else low=mid+1;
69             }
70             printf("%d\n",height+1);
71     }
72     return 0;
73 }
复制代码

 

F:substring http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=308

给定一个字符串,求改字符串的一个最长字串,并且该子串满足逆序后仍然是原串的字串。

该题主要是控制好两个循环就可以,比较难控制!

  

 

 

第五届:

最强DE战斗力   http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=541

较成熟的一届吧!   我们学校承办的!

学长出八队应战,斩金4枚,摘银3颗,牵铜一块!学长威武!@郑州轻工业学院

吾等菜鸟!压力山大!责任重大!

 

本题的规律题目已经给出,即可将每个数可以分成2和3,其中3 的数量要尽量的多,如6 可以分为3个2和2个3,显然2个3 的成绩跟大一点。

所以要优先考虑3.

但本题涉及数据较大,涉及到大数,增加了难度!

复制代码
View Code
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int ans[207];
 6 void fac(int x)
 7 {
 8     int i;
 9     for(i=0;i<201;i++)
10         ans[i]=ans[i]*x;
11     for(i=0;i<205;i++)
12     {
13         ans[i+1]+=ans[i]/10;
14         ans[i]%=10;
15     }
16 }
17 int main()
18 {
19     int n;
20     cin>>n;
21     while(n--)
22     {
23         int data;
24         int i;
25         cin>>data;
26         if(data<4)
27          cout<<data<<endl;
28         else
29         {
30             int k=data/3;
31             int y=data%3;
32             if(y==1)
33             {
34                 k--;
35                 y=4;
36             }
37                 memset(ans,0,sizeof(ans));
38                 for(i=0,ans[0]=1;i<k;i++)
39                     fac(3);
40                 if(y!=0)
41                     fac(y);
42                 for(i=205;i>=0;i--)
43                     if(ans[i]!=0)
44                         break;
45                 for(;i>=0;i--)
46                     cout<<ans[i];
47                 cout<<endl;
48         }
49     
50     }    return 0;
51 }
复制代码

 

 

posted @   heat nan  阅读(243)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示