Can you AK NOIP?——NOIPxxxx普及组全解

祝大家国庆节快乐地写作业

不得不承认,现在在看这篇随笔的dalao们,您太巨了!!!

不得不承认,这些题我都做了好几遍了。。。

不得不承认,我今天RP太好。。。

不得不承认,我得了300分。。。

1.ISDBN号码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char xyds[13];
int ctoi(char a){//char to int
	if(a=='X') return 10;
	else return a-'0';
}
char itoc(int b){//int to char
	if(b==10) return 'X';
	else return b+'0';
}
int main()
{
	//freopen("isbn.in","r",stdin);
	//freopen("isbn.out","w",stdout);
	int s=0,sum=0,ans=0;
	while(1){
		char ch;
		ch=getchar();
		if(ch=='\n') break;
		xyds[sum]=ch;
		sum++;
		if(ch>='0'&&ch<='9'&&sum<=11) s++,ans+=ctoi(ch)*s;//计算前9位数字
	}
	if(ans%11==ctoi(xyds[12])) printf("Right");//末位正确,输出Right
	else{
		for(int i=0;i<=11;i++) cout<<xyds[i];//末位错误,则输出正确结果
		cout<<itoc(ans%11);
	}
	return 0;
}

2.排座椅

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int a[1001],b[1001],x[1001],y[1001];
int main()
{
	//freopen("seat.in","r",stdin);
	//freopen("seat.out","w",stdout);
	int m,n,k,l,d;
	scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
	for(int i=1;i<n;i++) x[i]=i;
	for(int i=1;i<m;i++) y[i]=i;
	for(int i=1;i<=d;i++){
		int x1,y1,x2,y2;
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		if(x1==x2) a[min(y1,y2)]++;//统计交头接耳学生对数
		else b[min(x1,x2)]++;
	}
	for(int i=1;i<m-1;i++){//排序,取出前k组
		for(int j=i+1;j<m;j++){
			if(b[i]<b[j]){
				swap(b[i],b[j]);
				swap(y[i],y[j]);
			}
		}
	}
	sort(y,y+k+1);//对前k组对应的行数再次进行排序,保证有序输出
	bool xyds=0;
	for(int i=1;i<=k;i++){//输出
		if(!xyds){//OJ输出格式错误有毒。。。
			printf("%d",y[i]);
			xyds=1;
		}
		else printf(" %d",y[i]);
	}
	printf("\n");
	for(int i=1;i<n-1;i++){//同上
		for(int j=i+1;j<n;j++){
			if(a[i]<a[j]){
				swap(a[i],a[j]);
				swap(x[i],x[j]);
			}
		}
	}
	sort(x,x+l+1);
	bool djy=0;
	for(int i=1;i<=l;i++){
		if(!djy){
			printf("%d",x[i]);
			djy=1;
		}
		else 
		printf(" %d",x[i]);
	}
	return 0;
}

3.传球游戏

#include<algorithm>
#include<cstdio>
int dp[31][31];//DP大法好
int n,m;
int f(int x)
{
	if(x==0) return n;
	else if(x==n+1) return 1;
	else return x; 
}
int main()
{
	//freopen("ball.in","r",stdin);
	//freopen("ball.out","w",stdout);
	dp[0][1]=1;//初始化
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++) dp[i][j]=dp[i-1][f(j-1)]+dp[i-1][f(j+1)];//每个同学可以把球传给自己左右的两个同学中的一个,不解释
	}
	printf("%d",dp[m][1]);//回到了小蛮手里
	return 0;
}

 4.立体图(警告:本题主要考察大家的艺术功底,以下代码无法AC,并非正解,仅供娱乐)

#include<algorithm>
#include<cstdio>
int main()
{
	//freopen("drawing.in","r",stdin);
	//freopen("drawing.out","w",stdout);
	printf("......+---+---+...+---+\n");
	printf("..+---+  /   /|../   /|\n");
	printf("./   /|-+---+ |.+---+ |\n");
	printf("+---+ |/   /| +-|   | +\n");
	printf("|   | +---+ |/+---+ |/|\n");
	printf("|   |/   /| +/   /|-+ |\n");
	printf("+---+---+ |/+---+ |/| +\n");
	printf("|   |   | +-|   | + |/.\n");
	printf("|   |   |/  |   |/| +..\n");
	printf("+---+---+---+---+ |/...\n");
	printf("|   |   |   |   | +....\n");
	printf("|   |   |   |   |/.....\n");
	printf("+---+---+---+---+......");
	return 0;
}

  

posted @ 2018-10-01 13:53  轩辕东升  阅读(660)  评论(0编辑  收藏  举报