当前位置:懂科普 >

综合知识

> noip问题

noip问题

noip问题

noip的初赛问题..和 或..设A=True,B=False,C=True,D=False,以下逻辑运算表达式值为真的是( A).A.(A∧B.∨(C∧D∨﹁

A. B.((﹁A∧

B. ∨C.∧﹁D

C.(B∨C∨D. ∧D∧A

D.A∧(D∨﹁C)∧B这个 「和﹁的符号意思..如何算..呐

答案是:这个是非。就是NOT

小编还为您整理了以下内容,可能对您也有帮助:

NOIP的问题

这道题看上去是逻辑运算,其实是可以当成数学的集合问题去解:

A-B={x|x∈A但x不属于B}={a,c}

∽C在数学意义上相当于C在全集I中的补集,

所以∽C={x|x∈I但x不属于C}={a,b,c,d}

因为B={b, d, e}

所以∽C∩B={x|x∈B且x∈∽C}={b,d}

而(A-B)∪(∽C∩B)={x|x∈(A-B)或x∈(∽C∩B)}={a,b,c,d}

所以选A

够详细了吧~

关于noip的问题

第一题实在是水……由于a、b都不超过maxlongint(maxlongint=21亿多),所以直接输入a、b,做减法即可

第二题实际上是输入N,让你算出(2^n-1)%10000是多少。由于N=maxlongint,直接算的话,O(N)会超时,所以采用分治算法,思想很简单,就是:

2^n=(2^ N/2)*(2^ N/2),这样,你算一遍2^ N/2,第二次乘的时候就不用再算了。复杂度O(logN),很快。至于%10000,你每次算的时候都%10000即可。

第三题是经典的配对动规,f(i,j),代表在A序列中的前i个,和B序列中的前j个配对,所产生的最小恶心度。那么:

f(i,j)=f(i-1,j-1)+abs(v[i]-v[j])(选择) 或者f(i-1,j)(不选)

当中较小的那个。由于j比较小,所以当miss的时候,不能选择miss第二个序列。

第四题是记忆化广搜,每次搜到一个点的时候,如果我当前的消耗比它短,则更新我到这个点的最小消耗值。队列空了之后,输出相应的值即可。注意本题不能用动态规划,因为存在着故意绕道的情况。

第五题应该是树状数组吧。这个我真的不会了,模拟30分吧。

关于noip的复赛问题

算法竞赛对文件名有着严格的规定,包括程序名和输入输出文件名,不要使用绝对路径或者相对路径。

你的这个题目规定程序名是cross,那么程序的源代码就要存为cross.c,输入文件为cross.in,输出文件名为cross.out,一般来说的话都是这样要求的。比赛的时候代码手册上面应该也会有说明和DEMO的。

文件输入输出有两种方法:

方法一:使用文件重定向

#define LOCAL

#include<stdio.h>

#define INF 1000000000

int main(){

#ifdef LOCAL

  freopen("cross.in", "r", stdin);

  freopen("cross.out", "w", stdout);

#endif

  int x, n = 0, min = INF, max = -INF, s = 0;

  while(scanf("%d", &x) == 1) {

    s += x;

    if(x < min) min = x;

    if(x > max) max = x;

/*

    printf("x = %d, min = %d, max = %dn", x, min, max);

*/

    n++;

  }

  printf("%d %d %.3lfn", min, max, (double)s/n);

  return 0;

}

这种写法的好处就是如果OJ要求使用标准输入输出的话 直接把#define LOCAL删除就可以了。

但是有的时候比赛禁止使用重定向的话就需要用fopen了。

方法二:fopen版

#include<stdio.h>

#define INF 1000000000

int main(){

  FILE *fin, *fout;

  fin = fopen("cross.in", "rb");

  fout = fopen("cross.out", "wb");

  int x, n = 0, min = INF, max = -INF, s = 0;

  while(fscanf(fin, "%d", &x) == 1) {

    s += x;

    if(x < min) min = x;

    if(x > max) max = x;

    n++;

  }

  fprintf(fout, "%d %d %.3lfn", min, max, (double)s/n);

  fclose(fin);

  fclose(fout);

  return 0;

}

全部为本人手打,希望可以采纳。本人ACM弱鸡,祝你在NOIP上面取得好成绩哟!!!

标签: noip
  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/3lw7mx.html