CSP-201503

问题描述

试题编号: 201503-1
试题名称: 图像旋转
时间限制: 5.0s
内存限制: 256.0MB
问题描述:
问题描述
  旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
  计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
  输入的第一行包含两个整数 nm,分别表示图像矩阵的行数和列数。
  接下来 n行每行包含 m个整数,表示输入的图像。
输出格式
  输出 m行,每行包含 n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
样例输入
2 3
1 5 3
3 2 4
样例输出
3 4
5 2
1 3
评测用例规模与约定
  1 ≤  n≤ 1,000,矩阵中的数都是不超过1000的非负整数。

模拟。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define pfi pair<float,int>
 4 int n,m,a[1010][1010];
 5 int main(){
 6     scanf("%d%d",&n,&m);
 7     for(int i=1;i<=n;++i)
 8         for(int j=1;j<=m;++j)scanf("%d",&a[i][j]);
 9     for(int i=m;i>=1;--i){
10         for(int j=1;j<=n;++j){
11             printf("%d%c",a[j][i],j==n?'\n':' ');
12         }
13     }
14     return 0;
15 }
View Code

问题描述

试题编号: 201503-2
试题名称: 数字排序
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  给定 n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
  输入的第一行包含一个整数 n,表示给定数字的个数。
  第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
  输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5
样例输出
3 4
2 3
5 3
1 1
4 1
评测用例规模与约定
  1 ≤  n ≤ 1000,给出的数都是不超过1000的非负整数。

水题。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct factor{
 4     int num,times;
 5     bool operator<(const factor& chs)const{
 6         if(times==chs.times) return num<chs.num;
 7         return times>chs.times;
 8     }
 9 }p;
10 vector<factor>vf;
11 int n,a,tot[1010];
12 int main(){
13     cin>>n;
14     while(n--){
15         cin>>a;
16         tot[a]++;
17     }
18     for(int i=0;i<=1000;++i){
19         if(tot[i]){
20             p.num=i;
21             p.times=tot[i];
22             vf.push_back(p);
23         }
24     }sort(vf.begin(),vf.end());
25     for(vector<factor>::iterator it = vf.begin();it!=vf.end();it++)cout<<it->num<<' '<<it->times<<endl;
26     return 0;
27 }
View Code

问题描述

试题编号: 201503-3
试题名称: 节日
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  有一类节日的日期并不是固定的,而是以“ a月的第 b个星期 c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
  现在,给你 abcy 1y 2(1850 ≤  y 1y 2 ≤ 2050),希望你输出从公元 y 1年到公元 y 2年间的每年的 a月的第 b个星期 c的日期。
  提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
  为了方便你推算,已知1850年1月1日是星期二。
输入格式
  输入包含恰好一行,有五个整数 abcy 1y 2。其中 c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。
输出格式
  对于 y 1y 2之间的每一个年份,包括 y 1y 2,按照年份从小到大的顺序输出一行。
  如果该年的 a月第 b个星期 c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
  如果该年的 a月第 b个星期 c并不存在,则输出"none"(不包含双引号)。
样例输入
5 2 7 2014 2015
样例输出
2014/05/11
2015/05/10
评测用例规模与约定
  所有评测用例都满足:1 ≤  a ≤ 12,1 ≤  b ≤ 5,1 ≤  c ≤ 7,1850 ≤  y 1y 2 ≤ 2050。

算出来i年a月1日是周几,然后推算出目标日期对应的号数看是否超过了当前年月份得最大天数即可。注意闰年二月特判。

遇到了一个很有趣得bug,我把isr(i)写作了isr[i]但是编译通过了。。。

扫描二维码关注公众号,回复: 8418892 查看本文章
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a,b,c,y1,y2;
 4 int d[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 5 
 6 struct MyDate
 7 {
 8 int year;
 9 int month;
10 int day;
11 };
12 bool isr(int r){return r%4==0 && r%100!=0 || r%400==0;}
13 int GetAbsDays(MyDate x)
14 {
15 int i;
16 int month_day[] = {31,28,31,30,31,30,31,31,30,31,30,31};
17 int year = x.year-1;
18 int days = year * 365 + year/4 - year/100 + year/400;
19 if(isr(x.year)) month_day[1]++;
20 for(i=0; i<x.month-1; i++)
21 days += month_day[i];
22 days += x.day-1;
23 return days;
24 }
25 
26 
27 int main(){
28     cin>>a>>b>>c>>y1>>y2;c%=7;
29     for(int i=y1;i<=y2;++i){
30         if(isr(i))d[2]++;
31         int wek=(GetAbsDays(MyDate{i,a,1})+1)%7,cur=1;
32         while(wek!=c){
33             cur++;
34             wek=(wek+1)%7;
35         }
36         cur=cur+(b-1)*7;
37         if(cur<=d[a]){
38             printf("%d/%02d/%02d\n",i,a,cur);
39         }else cout<<"none"<<endl;
40         if(isr(i))d[2]--;
41     }
42     return 0;
43 }
View Code

--

猜你喜欢

转载自www.cnblogs.com/zzqc/p/12149840.html