D1 All are Same
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
int arr[N];
int main()
{
int t;
cin >> t;
int n;
while (t--)
{
cin >> n;
bool flag = 0;
cin >> arr[1];
for (int i = 2; i <= n; i++)
{
cin >> arr[i];
if (arr[i] != arr[i - 1])
flag = 1;
}
if (!flag)
cout << -1 << endl;
else
{
sort(arr + 1, arr + 1 + n);
int minv = arr[2] - arr[1];
for (int i = 3; i <= n; i++)
{
minv = __gcd(minv, (int)abs(arr[i] - arr[i - 1]));
}
cout << minv << endl;
}
}
}
D2. Half of Same
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int, int>
#define IOS \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
const int inf = 0x3f3f3f3f;
const int maxn = 1e6 + 7;
int arr[107];
int n, ans;
bool ck(int k)
{
map<int, int> mp;
for (int i = 1; i <= n; ++i)
{
mp[(arr[i] + maxn * k) % k]++;
if (mp[(arr[i] + maxn * k) % k] >= n / 2)
return 1;
}
return 0;
}
signed main()
{
IOS int T;
cin >> T;
while (T--)
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
}
sort(arr + 1, arr + 1 + n);
int sum = 1;
bool fg = 0;
for (int i = 2; i <= n; i++)
{
if (arr[i] == arr[i - 1])
{
sum++;
if (sum >= n / 2)
fg = 1;
}
else
sum = 1;
}
if (fg)
{
cout << -1 << endl;
continue;
}
srand(time(0));
ans = 1;
int ti = 1e3;
while (ti--)
{
int x = rand() % n + 1;
int y = rand() % n + 1;
int tp = abs(arr[y] - arr[x]);
for (int i = 1; i * i <= tp; i++)
if (tp % i == 0)
{
if (ck(i))
ans = max(ans, i);
if (ck(tp / i))
ans = max(ans, tp / i);
}
}
cout << ans << endl;
}
}
模拟退火
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define pii pair<int,int>
#define psi pair<string,int>
#define ull unsigned ll
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define ld long double
const int N = 4E5 + 7;
#define INF ~0ULL
int n;
int a[N];
bool check(int k){
map<int,int>mp;
for(int i=0;i<n;i++){
int x=(a[i]+k*N)%k;
mp[x]++;
}
for(auto t:mp)
if(t.y>=n/2)return true;
return false;
}
void solve(){
map<int,int>mp;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i],mp[a[i]]++;
for(auto t:mp){
if(t.y>=n/2){
cout<<-1<<endl;
return;
}
}
vector<int>q;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
q.push_back(abs(a[i]-a[j]));
int res=1;
for(int i=0;i<1000;i++){
int x=rand()%q.size();
int y=rand()%q.size();
//cout<<q[x]<<" "<<q[y]<<endl;
if(!q[x]&&!q[y])continue;
int k=__gcd(q[x],q[y]);
if(check(k))res=max(res,k);
}
cout<<res<<endl;
}
main(){
int T;
cin>>T;
while(T--)solve();
}
E Gardener and Tree
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=2e18+100;
const int maxn=4e5+100;
vector<int>g[maxn];
int in[maxn];
bool vis[maxn];
signed main()
{
IOS
int tt;
cin>>tt;
while(tt--)
{
queue<pii>q;
int n,k;
cin>>n>>k;
memset(vis,0,sizeof(bool)*(n+10));
memset(in,0,sizeof(int)*(n+10));
for(int i=1;i<=n;i++)g[i].clear();
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
g[u].pb(v);
g[v].pb(u);
in[u]++;
in[v]++;
}
if(n==1)
{
if(k>=1)cout<<"0"<<"\n";
else cout<<"1"<<"\n";
continue;
}
for(int i=1;i<=n;i++)
{
if(in[i]==1)
{
q.push({i,1});
vis[i]=1;
}
}
while(!q.empty())
{
auto now=q.front();
if(now.se>k)break;
vis[now.fi]=1;
q.pop();
for(auto it:g[now.fi])
{
in[it]--;
if(in[it]==1)
{
if(now.se+1<=k)
{
q.push({it,now.se+1});
}
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(!vis[i])ans++;
}
cout<<ans<<"\n";
}
}