第十二届西科大程序设计竞赛心得(菜菜的
Posted yy222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十二届西科大程序设计竞赛心得(菜菜的相关的知识,希望对你有一定的参考价值。
首先,选了一道在题目列表里名字不太一样的题来做, G. ACMer的荣耀。
这道题有两点没注意到:其一是开始时想成了10以内的运算,没有分解整数。其二是没有注意分解整数里的while跳出条件i=0时也是要加上6的。导致交了5遍才对。。。
1 #include <cstdio> 2 typedef long long ll; 3 int a[10]={6,2,5,5,4,5,6,3,7,6}; 4 5 int main(void){ 6 int q; 7 ll ans; 8 while (scanf("%d", &q)!=EOF){ 9 int l, r; 10 while (q--){ 11 ans=0; 12 scanf("%d%d", &l, &r); 13 for (int i=l; i<=r; i++){ 14 int num; 15 int ii=i; 16 if (i==0){ 17 ans+=6; 18 } 19 while (ii){ 20 num = ii%10; 21 //printf("+%d ", a[num]); 22 ans+=a[num]; 23 ii/=10; 24 } 25 } 26 printf("%lld\n", ans); 27 } 28 } 29 return 0; 30 }
紧接着做了A题
学了一点map,边学边写出来的,map和set容器都会将里面的数据按字典序排序。还学到了用String类型的时候要写一个#include<string>的头文件。
1 #include <cstdio> 2 #include <map> 3 #include <string> 4 #include <algorithm> 5 #include <iostream> 6 using namespace std; 7 8 map<string, int> c; 9 10 int main(void){ 11 int n; 12 while (scanf("%d", &n)!=EOF){ 13 int score; 14 string s; 15 for (int i=0; i<n; i++){ 16 cin>>s>>score; 17 if (c[s] < score){ 18 c[s]=score; 19 } 20 } 21 for (map<string,int>::iterator it = c.begin(); it!=c.end(); ++it){ 22 cout<<it->first<<" "<<it->second<<endl; 23 } 24 c.clear(); 25 } 26 27 return 0; 28 }
写轰炸面积最多是多少那道题时,总感觉似曾相识,跟以前一道求坐标系上面积的题很像。那道题就是讲坐标系变成一个n*n的矩阵,然后标记上就行了。这道题我觉得很坑的是不能在n*n中遍历,因为你不知道输入的左下角,右上角坐标的最大值,n并不是界限,只是表示个数。所以我就用边界来遍历了,也就是101*101,i、j的范围都在【0,101)。
1 #include <cstdio> 2 #include <map> 3 #include <string> 4 #include <cstring> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 9 struct node{ 10 int x1; 11 int y1; 12 int x2; 13 int y2; 14 }node[105]; 15 16 int cnt[105][105]; 17 18 int main(void){ 19 int n; 20 while (scanf("%d", &n)!=EOF){ 21 for (int i=0; i<n; i++){ 22 scanf("%d%d%d%d", &node[i].x1, &node[i].y1, &node[i].x2, &node[i].y2); 23 } 24 memset(cnt, 0, sizeof(cnt)); 25 for (int i=0; i<n; i++){ 26 int lx, rx, ly, ry; 27 lx=node[i].x1; rx=node[i].x2; 28 ly=node[i].y1; ry=node[i].y2; 29 for (int k=lx; k<rx; k++){ 30 for (int j=ly; j<ry; j++){ 31 cnt[k][j]++; 32 } 33 } 34 } 35 /* 36 printf("cnt: \n"); 37 for (int i=0; i<101;i++){ 38 for (int j=0; j<101;j++){ 39 printf("%d ", cnt[i][j]); 40 } 41 printf("\n"); 42 }*/ 43 44 int m=0; 45 for (int i=0; i<101;i++){ 46 for (int j=0;j<101; j++){ 47 if (cnt[i][j]>m){ 48 m=cnt[i][j]; 49 } 50 } 51 } 52 printf("%d\n", m); 53 } 54 55 return 0; 56 }
看了题解之后 补了移动的反应堆那道签到题。。不知道对不对
1 #include <cstdio> 2 #include <map> 3 #include <set> 4 #include <string> 5 #include <cstring> 6 #include <algorithm> 7 #include <iostream> 8 using namespace std; 9 int a[100005]; 10 multiset<int> muls; 11 12 int main(void){ 13 int n; 14 int ans=0; 15 while (scanf("%d", &n)!=EOF){ 16 for (int i=0; i<n; i++){ 17 scanf("%d", &a[i]); 18 } 19 for (int i=0; i<n; i++){ 20 muls.insert(a[i]); 21 //printf("cnt = %d\n", muls.count(a[i])); 22 if (muls.count(a[i])==3){ 23 ans++; 24 muls.clear(); 25 } 26 } 27 printf("%d\n", ans); 28 } 29 30 return 0; 31 }
打了比赛之后,学到了很多。终于从0,1,2道题,变成了3道题了~而且还学到了不少~开心~
以上是关于第十二届西科大程序设计竞赛心得(菜菜的的主要内容,如果未能解决你的问题,请参考以下文章
湖南省第十二届大学生计算机程序设计竞赛 G Parenthesis
“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛 AHK