題意:有個n個點m條邊的圖,每個點都有權值,每次可以選擇乙個點權全是正數的連通塊,讓他們的權值整體-1,問把所有點權值變成0需要多少次操作。(1≤n,m≤1e5)樣例輸入:
1
3 23 2 3
1 22 3
輸出:
4
hint:並查集。ac**:正難則反。反著操作,先按照權值從大到小排序,從最大點開始倒著新增邊,一開始加入新的點,作為單獨的個體i,需要操作ai次,然後把他相鄰的邊依次加上。當他的存在使得兩個連通塊融合時,那麼兩個連通塊共享這個i,並且兩個連通塊上所有點權值都大於i,因此省去了ai次操作,答案-ai。
#includeusing namespace std;
const int n = 123456;
int pre[n],vis[n];
struct node
}a[n];
vectorv[n];
int find(int a)
int main();
}for(int i=1;i<=m;i++)
sort(a+1,a+n+1);
long long sum=0;
for(int i=1;i<=n;i++)
}vis[id]=1;
}printf("%lld\n",sum);
}system("pause");
return 0;
}
題意:f[i]是斐波那契數列,f[1]=1,f[2]=2,f[3]=3,f[4]=5輸入:bb:其中bi=,每個數都可以用某些斐波那契數相加得到,比如4==1*1+0*2+1*3
給出abc的bb表示,問是否有乙個fk使得a*b=c+fk。範圍如下:
1
3 1 0 1
4 0 0 0 1
6 0 1 0 0 0 1
輸出:
4
hint:unsigned long long的自然溢位可以實現,直接暴力跑 ,不過注意開陣列範圍要超過2e6。
#includeusing namespace std;
const int n = 2345678;
#define ull unsigned long long
ull f[n];
ull inline read()
return ans;
}int main()
system("pause");
return 0;
}
題意:有n個裝備,不超過k種,每種裝備都有它的屬性值ai,bi,ci,di,讓你取出不同種類的各一種,使得以下式子的值最大輸入:
輸出:1
6 41 17 25 10 0
2 0 0 25 14
4 17 0 21 0
1 5 22 0 10
2 0 16 20 0
4 37 0 0 0
297882000
hint:優化版的暴搜(新增了個nxt陣列,可以少跑好幾層遞迴)ac**:#includeusing namespace std;
#define ll long long
struct nodetmp;
vectorv[55];
ll ans=0;
int n,k;
int nxt[55];
void dfs(int x,int a,int b,int c,int d)
if(v[x].size()==0)
for(auto i:v[x])
}int main();
v[op].push_back(tmp);
}int x=k+1;
for(int i=k;i;i--)
ans=0;
dfs(1,100,100,100,100);
printf("%lld\n",ans);
}system("pause");
return 0;
}
題意: 給字串a,b,q次查詢,求a[l...r]與b的最長公共子串輸入:輸出:1
qaqaqwqaqaq
qaqwqaq
31 7
2 83 9
4
20
hint:序列自動機+dp求lcsnxt[i][j]表示a[i...n]種第乙個出現字母j的位置
dp[i][j]表示b的前i個字母匹配了j個了,最後乙個匹配的字母在a中的位置
#includeusing namespace std;
const int n = 123456;
int nxt[n][50];//a[i...n]中字母j的最近位置
int dp[50][50];//b中前i個字母匹配了j個,dp[i][j]表示最後乙個匹配的字母在a中的位置
char a[n],b[n];
void get_nxt()
nxt[i][a[i]-'a']=i;
}}int main()
}int tmp=lenb;
while(tmp)
printf("%d\n",r-l+1+lenb-tmp*2);}}
system("pause");
return 0;
}
2019杭電多校第二場
今天也是一條鹹魚orz 場上三題 e,j,k e everything is generated in equal probability 題解 乙個長度為n的排列的逆序期望為c n,2 2 因為每一對下標的貢獻都是1 2.然後設dp i dp i dp i 為長度為i ii的隨機排列的culcul...
2019杭電多校第二場
給定乙個 n 從 1,n 中等概率取出乙個數,再等概率生成乙個 n 的全排列,再計算這個全排列的函式值,求這個函式值的期望。函式表達為輸入乙個全排列,計算其逆序數,再等概率取出乙個子串行 可以是空,可以是原序列 遞迴計算該子串行的函式值,累加返回。include using namespace st...
2018暑假杭電多校第二場
問了yxz後做的。這個是我一般寫線段樹的方法,才覺得感覺有點麻煩,還是yxz的寫法安逸些 include bits stdc h define out x cout x typedef long long ll const ll maxn 5e5 5 int n,m int b maxn struc...