noip问题
- 综合知识
- 关注:1.31W次
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上面取得好成绩哟!!!
- 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/3lw7mx.html