A. 学姐的数码管 2014新生暑假个人排位赛03
题目描述
学姐的七段数码管玩的出神入化。 现在给你一个浮点数,你需要把它以七段数码管的形式输出出来。 一个 (2∗n+1)∗n 的矩阵来表示七段数码管,若下标均从0开始,则以第0列的两个,第 n−1 列的两个,第0行的一个,第 n 行的一个,第 2∗n 行的一个表示七个段。小数点所占矩形为 (2∗n+1)∗1 ,点在中间最下面一列。每一个数字或小数点矩阵用一列空格隔开。 数码管亮的部分用#覆盖,其余部分用空格补全,若一个数字或小数点的行末尾无#,也要用空格字符补全为 (2∗n+1)∗n 细节参见样例。
输入格式
输入有多组数据,数据不超过100组,每组数据给一个整数 n(3≤n≤10) ,和一个浮点数,输入保证每一个浮点数的总长度为4位且没有前导0。
输出格式
输出他的数码管显示。每组数据末尾输出一个空行。
输入样例
3 2330
3 1456
4 78.9
输出样例
### ### ### ###
# # # # #
# # # # #
### ### ### # #
# # # # #
# # # # #
### ### ### ###
# # # ### ###
# # # # #
# # # # #
# ### ### ###
# # # # #
# # # # #
# # ### ###
#### #### ####
# # # # #
# # # # #
# # # # #
# #### ####
# # # #
# # # #
# # # #
# #### # ####
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include <cstdlib>
#include <map>
using namespace std;
int n;
char m[5];
int main()
{
freopen("out.txt","w",stdout);
while(~scanf("%d",&n)){
scanf("%s",m);
for(int i=0;i<2*n+1;i++){
for(int j=0;j<4;j++){
switch(m[j]){
case '0': {
if(i==0||i==2*n){
for(int k=0;k<n;k++)
printf("#");
}
else {
for(int k=0;k<n;k++)
if(k==0||k==n-1)printf("#");
else printf(" ");
}
if(j!=3)
printf(" ");
}break;
case '1':{
for(int k=0;k<n-1;k++)
printf(" ");
printf("#");
if(j!=3)
printf(" ");
}break;
case '2':{
if(i==0||i==n||i==2*n)
for(int k=0;k<n;k++)
printf("#");
else if(i>0&&i<n){
for(int k=0;k<n;k++)
if(k==n-1)printf("#");
else printf(" ");
}
else
for(int k=0;k<n;k++)
if(k==0)printf("#");
else printf(" ");
if(j!=3)
printf(" ");
}break;
case '3':{
if(i==0||i==n||i==2*n)
for(int k=0;k<n;k++)
printf("#");
else{
for(int k=0;k<n-1;k++)
printf(" ");
printf("#");
}
if(j!=3)
printf(" ");
}break;
case '4':{
if(i>=0&&i<n)
for(int k=0;k<n;k++)
if(k==0||k==n-1)printf("#");
else printf(" ");
else if(i==n)
for(int k=0;k<n;k++)
printf("#");
else{
for(int k=0;k<n-1;k++)
printf(" ");
printf("#");
}
if(j!=3)
printf(" ");
}break;
case '5':{
if(i==0||i==n||i==2*n)
for(int k=0;k<n;k++)
printf("#");
else if(i>0&&i<n){
for(int k=0;k<n;k++)
if(k==0)printf("#");
else printf(" ");
}
else
for(int k=0;k<n;k++)
if(k==n-1)printf("#");
else printf(" ");
if(j!=3)
printf(" ");
}break;
case '6':{
if(i==0||i==n||i==2*n)
for(int k=0;k<n;k++)
printf("#");
else if(i>0&&i<n){
for(int k=0;k<n;k++)
if(k==0)printf("#");
else printf(" ");
}
else
for(int k=0;k<n;k++)
if(k==0||k==n-1)printf("#");
else printf(" ");
if(j!=3)
printf(" ");
}break;
case '7':{
if(i==0)
for(int k=0;k<n;k++)
printf("#");
else {
for(int k=0;k<n-1;k++)
printf(" ");
printf("#");
}
if(j!=3)
printf(" ");
}break;
case '8':{
if(i==0||i==n||i==2*n){
for(int k=0;k<n;k++)
printf("#");
}
else {
for(int k=0;k<n;k++)
if(k==0||k==n-1)printf("#");
else printf(" ");
}
if(j!=3)
printf(" ");
}break;
case '9':{
if(i==0||i==n||i==2*n)
for(int k=0;k<n;k++)
printf("#");
else if(i>n&&i<2*n){
for(int k=0;k<n;k++)
if(k==n-1)printf("#");
else printf(" ");
}
else
for(int k=0;k<n;k++)
if(k==0||k==n-1)printf("#");
else printf(" ");
if(j!=3)
printf(" ");
}break;
case '.':{
if(i==2*n)
printf("#");
else printf(" ");
if(j!=3)
printf(" ");
}break;
}
if(j==3) printf("\n");
}
}
printf("\n");
}
return 0;
}
一个if后面加了封号,导致无数pe.需要细心呐。
B. 学姐的旋转图像 2014新生暑假个人排位赛03
题目描述
学姐在学图形学,然后写了一个能让图片逆时针转圈的程序。这个程序很厉害,只要输入灰度图片和旋转过的角度(90的倍数),就可以输出一个新图片。给你一张图片的灰度矩阵,和它已转过的角度,请输出图片旋转前的灰度图矩阵。
输入格式
接下来给出图片扫描稿的高H和宽W,图片的灰度矩阵,高宽都小于500,题目其他的所有数值都小于int的范围。多组数据,组数小于20,EOF结束。
输出格式
一个矩阵
输入样例
2 2 180
0 1
1 2
输出样例
2 1
1 0
/*
USER_ID: test#wlwlxgg
PROBLEM: 430
SUBMISSION_TIME: 2014-07-18 13:23:06
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[500][500];
int main()
{
int h,w;
while(~scanf("%d%d",&h,&w)){
int angle;
scanf("%d",&angle);
for(int i=0;i<h;i++)
for(int j=0;j<w;j++)
scanf("%d",&a[i][j]);
if(angle/90%4==0){
for(int i=0;i<h;i++)
for(int j=0;j<w;j++){
printf("%d",a[i][j]);
if(j!=w-1)printf(" ");
else printf("\n");
}
}
else if(angle/90%4==1){
for(int i=0;i<w;i++)
for(int j=h-1;j>=0;j--){
printf("%d",a[j][i]);
if(j!=0) printf(" ");
else printf("\n");
}
}
else if(angle/90%4==2){
for(int i=h-1;i>=0;i--)
for(int j=w-1;j>=0;j--){
printf("%d",a[i][j]);
if(j!=0) printf(" ");
else printf("\n");
}
}
else if(angle/90%4==3){
for(int i=w-1;i>=0;i--)
for(int j=0;j<h;j++){
printf("%d",a[j][i]);
if(j!=h-1) printf(" ");
else printf("\n");
}
}
}
return 0;
}
水题。。
C. 字符串 2014新生暑假个人排位赛03
题目描述
维护一个字符串集合:初始为空,依次处理一些插入操作,并在插入之后输出该字符串在集合中出现的次数。
字符串的长度不超过100,字符串个数不超过100000。
输入格式
输入文件包含若干行,每行为一个字符串,依次代表一个待插入的字
符串。该字符串一定非空,且仅包含英文字母和数字。
输出格式
对于每个插入操作输出一行一个整数,代表插入该字符串之后,该字
符串在集合中出现的次数。
输入样例
str1
str2
str1
str1
str2
str3
输出样例
1
1
2
3
2
1
D. 田田的账号 2014新生暑假个人排位赛03
题目描述
田田申请了一个新的oj账号,打算取一个霸气而简单的名字。 什么叫简单呢?说白了田田脑子不好使,只能记住abcd这4个字母组成单词。 怎么叫霸气呢?田田认为a个个数一定要有奇数个,b的个数一定要有偶数个(包括0)才可以。 现在田田取了一个长为n的账号,但是由于田田的记性实在太差了,而把账号忘记了. 于是把这个问题交给了聪明的wzt,而他认为这道题太过于简单就把这道题交给了你 究竟这个账号有多少种可能?你只需得到这个结果模 109+7 的值
输入格式
多组case,第一行为case数 T ,之后 T 行每行一个整数 n 。 1≤n≤109 , T≤100
输出格式
一个case对应一行输出
输入样例
2
1
2
输出样例
1
4
/*
USER_ID: test#wlwlxgg
PROBLEM: 428
SUBMISSION_TIME: 2014-07-18 16:02:15
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
#include <map>
#include <cstring>
using namespace std;
long long pow_mod(long long a,long long i,long long n){
if(i==0) return 1%n;
long long temp=pow_mod(a,i>>1,n);
temp=temp*temp%n;
if(i&1) temp=(long long)temp*a%n;
return temp;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
printf("%lld\n",pow_mod(4,n-1,1000000007));
}
return 0;
}
稍微打个表就发现规律,但是要用快速幂,不然超时。