zoukankan      html  css  js  c++  java
  • 错误集锦

    posted on 2019-09-12 21:24:26

    发糖果

    	while(hd < tail) {
    		int u = q[hd++];
    		for(int i = head[u]; i; i = e[i].next) {
    			int v = e[i].to;
    			in[v]--;
    			if(in[v] == 0) {
    				buy[v] = buy[u] + 1;
    				q[tail] = v;
    				tail++;
    				sum++;
    			}
    		}
    	}
    
    

    误打成

    	while(hd < tail) {
    		int u = q[hd++];
    		for(int i = head[u]; i; i = e[i].next) {
    			int v = e[u].to;
    			in[v]--;
    			if(in[v] == 0) {
    				buy[v] = buy[u] + 1;
    				q[tail] = v;
    				tail++;
    				sum++;
    			}
    		}
    	}
    

    商旅计划

    struct edge {
    	int to, next;
    }e[2000005];
    

    e[200005]少打了一个 0


    P2047 [NOI2007]社交网络

    对于 50% 的数据, (n le 10 , m le 45)

    对于 100% 的数据, (n le 100 , m le 4500) ,任意一条边的权值 c 是正整数且 (1 leqslant c leqslant 1000)

    所有数据中保证给出的无向图连通,且任意两个结点之间的最短路径数目不超过 (10^{10})

    (10^{10})要用 long long

    应用

    long long sum[101][101];
    

    AC Challenge

    误将 | 打成 &

    int sn = s | (1 << (i - 1));
    

    hh真扎心

    互不侵犯King

    long long f(int i, int j, int k, int s)
    {
    	long long r = 0;
    	if(vis[i][j][k][s])
    		return ans[i][j][k][s];
       ...
    

    应该long long r = 0;

    因为每次都要用新的 r ,但是目前还不知道为什么不能定义全局变量 r ,只能重新定义。

    Mondriaan's Dream

    if(j < w && (((1 << j) & s) == 0) && i > 0)
    

    不知道优先级一定要加括号!!!

    特别是位运算!!!!!

    旅行商问题2

    for(int s = 1; s <= pow3[n] - 1; s++) {
    		for(int i = 0; i < n; i++) {
    			if((s / pow3[i]) % 3 == 2) continue;
    			for(int j = 0; j < n; j++) {
    				if(i == j) continue;
    				f[i][s + pow3[i]] = min(f[i][s + pow3[i]], f[j][s] + map[j][i]);
    			}
    		}
    	}
    

    或者

    for(int s = 1; s <= pow3[n] - 1; s++) {
    		for(int i = 0; i < n; i++) {
    			for(int j = 0; j < n; j++) {
    				if(i == j) continue;
    				if(f[j][s] == 0x3f3f3f3f) continue;
    				if((s / pow3[j]) % 3 < 2)
    					f[j][s + pow3[j]] = min(f[j][s + pow3[j]], f[i][s] + map[i][j]);
    			}
    		}
    	}
    

    前者是填表法,后者是刷表法

    判断的位置及状态转移方程自行体会

    mixup2 混乱的奶牛/奶牛混合起来Mixed Up Cows

    long long f[(1 << 16) + 1][16], ans;
    int main()
    {
    	cin >> n >> k;
    	for(int i = 0; i < n; i++)
    		cin >> a[i];
    	for(int i = 0; i < n; i++)
    		f[1 << i][i] = 1;
    	for(int i = 1; i < (1 << n); i++) {
    		for(int j = 0; j < n; j++) {
    			if((i & (1 << j)) == 0) 
    				continue;
    			if(f[i][j]) 
    				continue;
    			int s = i & ~(1 << j);
    			for(int u = 0; u < n; u++) {
    				if((i & (1 << u)) == 0) 
    					continue;
    				if(abs(a[j] - a[u]) > k)
    				f[i][j] += f[s][u];
    			}
    		}
    	}
    	for(int i = 0; i < n; i++)
    		ans += f[(1 << n) - 1][i];
    	cout << ans;
    return 0;
    }
    

    long long f[(1 << 16) - 1][16] 正好小1

    23333

    中间判断if(f[i][j])打成if(f[j][i])

    Apple Tree 2

    1. 数组一定要开四倍大小

    2. tag标记的是啥一定要想清楚

    void update(int u, int ul, int ur, int x)
    {
    	if(x == 0)
    		sum[u] = ur - ul + 1;
    	else
    		sum[u] = 0;
    	tag[u] = x;
    }
    void pushdown(int u, int ul, int ur)
    {
    	if(tag[u] != -1) {
    		int mid = ul + ur >> 1;
    		update(u << 1, ul, mid, tag[u]);
    		update(u << 1 | 1, mid + 1, ur, tag[u]);
    		tag[u] = -1;
    	}
    }
    

    特别是这两处tag的更新

    跳石头

    题目中这样一句话

    (0 leq M leq N leq 50000)

    我的程序中

    const int N = 50000;
    

    hh正好小1

    以后一定要多开一点

    50005 啊什么的

  • 相关阅读:
    第26月第13天 hibernate导包
    第26月第9天 getActionBar为空的解决办法
    第26月第8天 android studio 国内
    第26月第7天 mac如何matplotlib中文乱码问题
    第26月第6天 selenium
    第26月第3天 java gradle
    第26月第2天 vim javacomplete
    第25月第26天 dispatch_group_t dispatch_semaphore_t
    第25月25日 urlsession
    第25月第22日 django channels
  • 原文地址:https://www.cnblogs.com/xuanfly/p/11808599.html
Copyright © 2011-2022 走看看