2013年北邮计算机学院上机题

//2013年北邮计算机  A 日期
//by ben yafang
//2018/3/20
//done
#include<stdio.h>
#include<iostream>
using namespace std;
int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int runday[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
bool RunYear(int year){
	if(year % 100 != 0){
		if(year % 4 == 0) return true;
//		else return false;
	}
	else{
		if(year % 400 == 0) return true;
	}
	return false;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		char date[11];
		scanf("%s",date);
		int x,y,z;
		int days = 0;
		if(sscanf(date,"%d:%d:%d%c",&x,&y,&z)){
//			cout << RunYear(x);
			if(RunYear(x)){
				for(int i = 1;i < y;i++){
					days += runday[i];
				}
				days += z;
			}
			else{
				for(int i = 1;i < y;i++){
					days += day[i];
				}
				days += z;
			}
			printf("%d\n",days);
		}
	}
} 
//2013年北邮计算机  C 中序遍历序列 
//by ben yafang
//2018/3/20
//doing???二叉排序树 直接判断给定序列是否有序? 
#include<stdio.h>
#include<algorithm>
using namespace std;
//struct TreeNode{
//	int weight;
//	TreeNode *lchild;
//	TreeNode *rchild;
//}tree[401];
//int loc;
//TreeNode *create(){
//	tree[loc].lchild = tree[loc].rchild = NULL;
//	return &tree[loc++];
//}
//TreeNode *Insert(TreeNode *T,int x){
//	if(!T){
//		T = create();
//		T->weight = x;
//		return T;
//	}
//	if(!T->lchild) T->lchild = Insert(T->lchild,x);
//	if(!T->rchild) T->rchild = Insert(T->rchild,x);
//	return T;
//}
//bool IsSortTree(TreeNode *root){
//	if(root == NULL) return true;//空二叉树
//	else if(!root->lchild && !root->rchild){
//		return true;	
//	} 
//	else if(root->lchild && !root->rchild){
//		if(root->lchild->weight > root->weight){
//			return false;	
//		} 
//		else return IsSortTree(root->lchild);
//	} 
//	else if(root->rchild && !root->lchild){
//		if(root->weight > root->rchild->weight){
//			return false;	
//		} 
//		else return IsSortTree(root->rchild);
//	} 
//	else{
//		if(root->lchild->weight > root->weight || root->weight > root->rchild->weight)
//			return false;
//		else return (IsSortTree(root->lchild)&&IsSortTree(root->rchild));
//	}
//}
//void preOrder(TreeNode *root){
//	if(root->lchild) preOrder(root->lchild);
//	printf("%d ",root->weight);
//	if(root->rchild) preOrder(root->rchild);
//}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
//		loc = 1;//从1开始存 
		int n;
		scanf("%d",&n);
//		TreeNode *root = NULL;
		int input[n]; 
		int tmp[n];
//		int x;
		for(int i = 0;i < n;i++){
			scanf("%d",&input[i]);
			tmp[i] = input[i];
//			scanf("%d",&x);
//			root = Insert(root,x);//不是简单的按顺序插入,给定序列是二叉排序树的中序遍历
			//有序序列就是二叉排序树的中序,无序的就不是? 
		}
//		printf("n:%d",n);
		sort(tmp,tmp+n);
//		for(int i = 0;i<n;i++)printf("%d ",tmp[i]);
		int flag = 0;
		for(int i = 0;i <n;i++){
//			printf("inp:%d tmp:%d ",input[i],tmp[i]);
			if(tmp[i] != input[i]){
				flag = 1;
				printf("No\n");
				break;
			}
		}
		if(flag==0)printf("Yes\n");
//		preOrder(root);
//		if(IsSortTree(root))printf("Yes\n");
//		else printf("No\n");
	}
} 


//2013年北邮计算机  B 统计节点个数 
//by ben yafang
//2018/3/20
//done
//ac
#include<stdio.h>
struct TreeNode{
	int degree;
	int father;
	TreeNode *lchild;
	TreeNode *rchild;
}tree[1001];
int IsP(int x){
	int flag = 0;//0--true
	if(tree[x].lchild){
		TreeNode *node = tree[x].lchild;
		if(tree[x].degree < node->degree) flag = 1;
		while(node->rchild!=NULL){
			node = node->rchild;
			if(node->degree > tree[x].degree)flag = 1;
		}
	}
//	if(tree[x].rchild){
//		if(tree[x].degree < tree[x].rchild->degree) flag = 1;
//	}
	if(tree[x].father != -1){
		int baba = tree[x].father;
		if(tree[x].degree < tree[baba].degree) flag = 1;
	}
	if(flag == 1)return 0;
	else return 1;
}
int main(){
	int t;
	scanf("%d",&t);
//	int output[t];
//	int mem = t;
	while(t--){
		int n;
		scanf("%d",&n);
		for(int i = 0;i < n;i++){
			tree[i].degree = 0;
			tree[i].father = -1;
			tree[i].lchild = tree[i].rchild = NULL;
		}
		int x,y;
		int num = n;
		while(--n){
			scanf("%d%d",&x,&y);
			tree[x].degree += 1;
			tree[y].degree += 1;
			tree[y].father = x;
			if(!tree[x].lchild) tree[x].lchild = &tree[y];
			else{
				TreeNode *node = tree[x].lchild;
				while(node->rchild!=NULL) node = node->rchild;
				node->rchild = &tree[y];
			} 
		}
		int cnt = 0;
//		printf("%d",n);
		for(int i = 0;i < num;i++){
//			printf("%d %d\n",tree[i].father,tree[i].degree);
			if(IsP(i))cnt++;
		}
//		output[t] = cnt;
		printf("%d\n",cnt);
	}
//	for(int i = mem-1; i>=0;i++){
//		printf("%d",output[i]);
//		if(i != 0)printf("\n");
//	}
}
//北邮oj 127 最小距离查询 
//by ben yafang
//2018/3/24
#include<stdio.h>
#include<string.h>
char s[100001];
int dis[100001];
int len;
int update_mindis(int index){
	int front = index - 1;
	int back  = index + 1;
	while(front>=0||back<len){
		if(front >= 0 && s[index] == s[front]) return dis[index] = index-front;
		if(back < len && s[index] == s[back]) return dis[index] = back-index;
		front--;back++;
	}
	return dis[index] = -1;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		scanf("%s",s);
		len = strlen(s);		
		for(int i = 0;i < len;i++){
			update_mindis(i);
//			dis[i] = -1;
		}
		int m;
		scanf("%d",&m);
		while(m--){
			char opera[7];
			scanf("%s",opera);
//			len = strlen(s); 
			if(!strcmp(opera,"INSERT")){
				char c;
				scanf(" %c",&c);
				s[len] = c;//??????????????? 
				len++;
				for(int i = 0;i < len;i++){
					if(s[i] == c){
						update_mindis(i);
					}
				}
			}
			else{
				int x;
				scanf("%d",&x);
				printf("%d\n",dis[x]);
			}
		}
	}
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值