NOIP2017题目

作为NOIP2017考场爆零的选手,我来考完当一波马后炮(绝望..)

Day1

Day1除了T3都很SB(T1我不会证明)

T1

小凯的疑惑

#include<stdio.h>
#include<stdlib.h>
int main(){
    long long a,b;scanf("%lld%lld",&a,&b);
    printf("%lld
",a*b-a-b);
    return 0;
}

T2

时间复杂度
模拟大活题,你可以选择DeBug(1h+10min)就可以AC

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<iostream>
#define ll long long
#define re register
using namespace std;
inline int gi(){
	int f=1,sum=0;char ch=getchar();
	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
	return f*sum;
}
int t,L,have,val[100010],fuza,refuza;
char Time[10],For[10],For2[10];bool use[30],cant[1000010];
char Bian[1000010][2];
int main(){
	cin>>t;
	while(t--){
		cin>>L>>Time;fuza=0;refuza=0;int flag=0;have=0;
		int flagcan=0;
		memset(use,0,sizeof(use));memset(cant,0,sizeof(cant));
		for(re int i=1;i<=L;i++){
			char ch;
			cin>>ch;
			if(ch=='F'){
				fuza++;
				cin>>Bian[fuza];
				if(use[Bian[fuza][0]-'a']){flag=1;}
				use[Bian[fuza][0]-'a']=1;
				cin>>For;cin>>For2;
				if(flagcan){cant[fuza]=1;use[Bian[fuza][0]-'a']=0;continue;}
				if(flag)continue;
				int b1=0,b2=0;
				if(For[0]=='n')b1=1;
				if(For2[0]=='n')b2=1;
				if((!b1 && b2))val[++have]=1;
				else if(!b2 && b1 || (strlen(For)>strlen(For2) || (strcmp(For,For2))>0 && strlen(For)==strlen(For2))){
					cant[fuza]=1;flagcan=1;
					use[Bian[fuza][0]-'a']=0;
				}
			}
			else{
				if(cant[fuza]){cant[fuza--]=0;continue;}
				else flagcan=0;
				use[Bian[fuza][0]-'a']=0;
				refuza=max(refuza,have);
				if(val[have])val[have--]=0;
				fuza--;
				if(fuza<0)flag=1;
			}
		}
		if(flag || fuza!=0)puts("ERR");
		else{
			if(Time[2]=='1'){
				if(refuza==0)puts("Yes");else puts("No");
			}
			else{
				int i=4,ref=0;
				while(Time[i]>='0' && Time[i]<='9')ref=(ref*10)+Time[i++]-'0';
				if(ref!=refuza)puts("No");
				else puts("Yes");
			}
		}
	}
	return 0;
}

Day2

T1

奶酪

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
inline int gi() {
    int sum=0,f=1;
    char ch=getchar();
    while(ch<'0' || ch>'9') {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9') {
        sum=sum*10+ch-'0';
        ch=getchar();
    }
    return sum*f;
}
struct node {
    long long x,y,z;
} a[1010];
int g[1010][1010],di[1010],ding[1010],dp[1010];
int cmp(node a,node b) {
    return a.z<b.z;
}
long long dis(int i,int j) {
    return (a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)+(a[i].z-a[j].z)*(a[i].z-a[j].z);
}
int main() {
    int i,j,k,n,m,h,r;
    int T=gi();
    while(T--) {
        n=gi();
        h=gi();
        r=gi();
        for(i=1; i<=n; i++) {
            scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
        }
        std::sort(a+1,a+n+1,cmp);
        memset(g,0,sizeof(g));
        memset(di,0,sizeof(di));
        memset(ding,0,sizeof(ding));
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(dis(i,j)<=1ll*4*r*r)
                    g[i][j]=1;
        for(i=1; i<=n; i++) {
            if(a[i].z-r<=0)di[i]=1;
            if(a[i].z+r>=h)ding[i]=1;
        }
        for(i=1; i<=n; i++)
            if(di[i])dp[i]=1;
            else dp[i]=0;
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(g[i][j])
                    if(dp[j])dp[i]=1;
        int fla=0;
        for(i=1; i<=n; i++)
            if(dp[i] && ding[i]) {
                fla=1;
                break;
            }
        if(fla)printf("Yes
");
        else printf("No
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/cjgjh/p/9526116.html