2017ACM ICPC廣西邀請賽

2021-08-21 11:05:02 字數 4494 閱讀 9972

c - counting stars

無向圖求三元環

這裡需要一些小小的改動

題目中要求的a結構其實是兩個具有一條公共邊的三元環

求這樣的個數

根據演算法我們一開始就是先列舉一條邊,這樣我們就以第一條邊為公共邊,找出三元環的個數,然後從這n個中選2個即可,也就是sum⋅(sum−1)/2

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int maxn=1e5+10;

vector

g[maxn];

unordered_set

st;int vis[maxn],link[maxn],out[maxn];

int main()

for(int i=1;i<=m;i++)

ans=0;

for(int i=1;i<=n;i++)

}else

}ans+=sum*(sum-1)/2;}}

printf("%lld\n",ans);

}return

0;}

d - covering

通過dfs產生前10個數,列成方程組的形式結合搞死先生的消元法算出四個係數

之所以是4個可能是因為4*n的緣故把。

ac**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mm(a,b) memset(a,b,sizeof(a))

#define accelerate (ios::sync_with_stdio(false),cin.tie(0))

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

#define maxn 0x3f3f3f3f3f3f3f3f

#define pi acos(-1.0)

#define e exp(1.0)

using

namespace

std;

const ll mod=1e9+7;

const

int n=4;

struct nodetmp,ans,t;

//#define debug

node matrix(node x,node y )}}

return q;

}void quick_ma(ll n)

}for(int i=1;i<=n;i++) ans.a[i][i]=1;

t=tmp;

while(n)

}int main()

}tmp.a[1][1]=1;

tmp.a[1][2]=5;

tmp.a[1][3]=1;

tmp.a[1][4]=-1;

tmp.a[2][1]=1;

tmp.a[3][2]=1;

tmp.a[4][3]=1;

while(scanf("%lld",&n)!=eof)

}return0;}

/**/

附上搞死先生的消元法「:

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=100;

double a[n][n];

double ans[n];

int n;

void swap_r(int q,int p)

}void swap_c(int q,int p)

}void prt()

printf("\n");

}void gs()

//coutswap_r(p,i);

if(q!=i)

swap_c(q,i);

//prt();

for(int j=i+1;j<=n;j++)

//prt();

}prt();

}void red()

}prt();

}int main()

附上dfs打表的**:

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=1e5+10;

bool vis[4][100];

int ans;

void dfs(int i,int j,int n)

int nj=j+1;

int ni=i;

if(nj==n)

if(vis[i][j]) dfs(ni,nj,n);

else

if(i!=3&&!vis[i+1][j])

}}void make_table(int n)

}int main()

e - cs course

可以有兩種方法來實現。

第一種方法:

通過前字尾和來計算,因為是從中任意刪除乙個,如果直接進行模擬的話,太浪費時間,而採用前字尾和的方法既簡便又又節省時間。

第二種方法:

通過模擬位運算的特點;

因為與運算只要有乙個為0則全部為0,或運算只要有乙個是1就全部為1,

異或運算,現將全部的數字進行異或運算,然後再拿要刪除的那個元素跟最後結果進行異或就能得到答案。

因此在計算與跟或的時候只需要數出每一位上的0跟1的數目,然後再跟要刪除的那個數的相應位數進行比較即可。

附**:

#include

#include

#include

#include

using namespace std;

int a[100005];

int presumand[100005];

int sufsumand[100005];

int presumor[100005];

int sufsumor[100005];

int presumno[100005];

int sufsumno[100005];

int main()

//前前前

presumand[0]=presumor[0]=presumno[0]=a[0];

for(int i=1;i1];

presumor[i]=presumor[i-1]|a[i];

presumno[i]=presumno[i-1]^a[i];

}sufsumand[n-1]=sufsumor[n-1]=sufsumno[n-1]=a[n-1];

for(int i=n-2;i>=0;i--)

int k;

while(p--)else

if(k==n-1)

else}}

return

0;}

#include

#include

#include

using

namespace

std;

const

int n=1e5+5;

int a[n];

int cnt[n];

int main()

int op;

for(int i=0;iscanf("%d",&op);

int t=a[op-1];

int ans1=0,ans2=0;

for(int j=0;jif(cnt[j]==0||(cnt[j]==1&&t%2==0)) //0個數為0的話,則與,或都要運算; 如果0個數為1,而不要的數本位是0,則剩餘0個數也為0

ans1+=1

<1

if(n-cnt[j]>1||(n-cnt[j]==1&&t%2==0))

ans2+=1

<>=1;

}printf("%d %d %d\n",ans1,ans2,ans3^a[op-1]);}}

return

0;}

2017 ACM ICPC 廣西邀請賽 題解

題目鏈結 problems hdoj上的題目順序可能和現場比賽的題目順序不一樣,我這裡的是按照hdoj的題目順序來寫的。problem 1001 簽到 include using namespace std define rep i,a,b for int i a i b i typedef lon...

2017 ACM ICPC 西安邀請賽總結

在這個月20號,我和隊友自費去了西安參加邀請賽,本想著就算拿不了好成績也不至於太差了,然而事實總是出乎意料,讓我打出了第一次參加 acm 的感覺 想起一年前第一次參加 acm,簡直了,讓我懷疑人生,一開始自信心滿滿,可是賽後卻心灰意冷 為此,比賽後一直到現在我都沒有調整過來心態,心態太 了,一度懷疑...

2017ACM ICPC北京賽區

有n只貓,和m條魚,第i只貓吃掉一條魚所花的時間為c i 乙隻貓,吃完乙個會繼續吃 如果還有的話 問在x時刻後有多少條魚留下 分別輸出完整的和不完整的 分析 暴力for一遍,trick 給每只貓設定乙個標記表示i秒的時候,它吃的魚還剩多少,這樣方便統計,便於模擬啊 include define ll...