— 浙江NOIP2018-初赛题解报告 —

— NOIP2018-普及组题解报告 —

    1- 选择题

  • 1.D [ 这个绝对是打印机啊... ]
  • 2.D [ (269)16=617;(617)10=617;(1151)8=617;(1001101011)2=352 ]
  • 3.D [ 1MB=1024KB=1024*1024B ]
  • 4.B [ 广域网=WAN,Wide Area Network ]
  • 5.B [ 两千零十八以内的减法计算 Ans=Now-Num ]
  • 6.A [ 八位一循环 - " ASDFasdf " a[81%8]='A' ]
  • 7.A [ 特殊值大法好 / 注意 h=0 导致 h+=1 ]
  • 8.A [ 据说基数排序就是桶排... ]
  • 9.C [ 两两一比较,大的和大的,小的和小的 ]
  • 10.B [ 和 While(1)Rp++; 差不多吧... ]
  • 11.A [ 三边:2,四边:2,五边:1,六边:1 ]
  • 12.B [ 集合初步(其实是组合数学)C(7,10) ​/ 2^10 = 120/1024 ]
  • 13.B [ φ(10000) : 10000的质因数只有二和五 然后跑一遍Ven图 ]
  • 14.B [ 继续特殊值不要停 ]
  • 15.B [ 我不想说话 ]

    1. 2 - 问题求解

  • 1. 去了,没去,没去,没下雨 [ 简单逻辑 ]
  • 2. 544 [ 分段考虑 反正我用Ven图炸了QwQ / 第4页有定义!! ]

  • 3 - 阅读程序

    Input : QuanGuoLianSai
    Output : RuanHuoMianTai
    Tip : 大写字母变成下一个大写字母[A->B],[Z->A]

    Input : 15
    Output : 4
    Tip : i=1,4,11,14

    Input : 5 6
    Output : 8
    Tip : 也许你可以用掉两张草稿纸来画递归树…

    Input : 10 7 1 4 3 2 5 9 8 0 6
    Output : 6
    Tip : 模拟


    完善程序

    1.最大公约数之和

    #include
    using namespace std;
    const int N=110000,P=10007;
    int n;
    int a[N],len;
    int ans;
    void getDivisor(){
    	len=0;
    	for(int i=1;i*i<=n;i++) //[1]
    		if(n%i==0){
    			a[++len]=i;
    			if(n/i!=i)a[++len]=n/i; //[2]
    		}
    }
    int main(){
    	cin>>n;
    	getDivisor();
    	ans=0;
    	for(int i=1;i<=len;i++){
    		for(int j=i+1;j<=len;j++){
    			ans=(ans+gcd(a[i],a[j]))%p; //[5]
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

    求GCD的水题

    2.恶心的 双向链表

    #include
    using namespace std;
    const int N=100010;
    int n;
    int L[N],R[N],a[N];
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;++i){
    		int x;
    		cin>>x;
    		a[x]=i; //[1]
    	}
    	for(int i=1;i<=n;++i){
    		R[i]=i+1; //[2]
    		L[i]=i-1;
    	}
    	for(int i=1;i<=n;++i){
    		L[R[a[i]]]=L[a[i]]; //[3]
    		R[L[a[i]]]=R[a[i]]; //[4]
    	}
    	for(int i=1;i<=n;++i){
    		cout<<R[i]<<" "; //[5]
    	}
    	cout<<endl;
    	return 0;
    }
    

    链表式读入,链表式初始化,对称性*2,仅R[i]可能出现n+1;


    最后来一点废话

    #include
    using namespace std;
    typedef Longest INF 
    INF rp,pr;
    int main(){
    	cin>>pr;
    	pr=abs(pr)+1;
    	while(pr){
    		pr++;
    		rp+=pr;	
    	}
    	cout<<"NOIP2018:\n";
    	if(rp==-1)cout<<"rp=0x7fffffff\n";
    	else cout<<"Fighting!\n";
    	return 0;
    }
    

    你可能感兴趣的:(Welc)