c - counting stars
無向圖求三元環
這裡需要一些小小的改動
題目中要求的a結構其實是兩個具有一條公共邊的三元環
求這樣的個數
根據演算法我們一開始就是先列舉一條邊,這樣我們就以第一條邊為公共邊,找出三元環的個數,然後從這n個中選2個即可,也就是sum⋅(sum−1)/2
d - covering#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;}
通過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;}
/**/
附上dfs打表的**:#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()
e - cs course#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()
可以有兩種方法來實現。
第一種方法:
通過前字尾和來計算,因為是從中任意刪除乙個,如果直接進行模擬的話,太浪費時間,而採用前字尾和的方法既簡便又又節省時間。
第二種方法:
通過模擬位運算的特點;
因為與運算只要有乙個為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...