綜合知識

當前位置 /首頁/綜合知識 > /列表

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上面取得好成績喲!!!

TAG標籤:noip #