The Preliminary Contest for ICPC Asia Xuzhou 2019
小 银 川,给大爷们AK穿了
比赛地址:https://www.jisuanke.com/contest/3005?view=challenges
A、(待补)
B、1e9的数据范围,一开始从1到n的所有数字都有一个标记
q个询问,去掉某个数字上的标记,询问某个数字之后最靠近它的有标记的数字,保证n一直有标记,去除了无解的情况
用一个类似于动态分配的并查集,离线处理所有询问,首先给所有询问的点分配空间,每次给某个点打上标记就相当于把这个点与这个点加一合并
用了unordered_map加快读快写,甚至关了define int long long才卡过去
代码:
#include <bits/stdc++.h> //#define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=1000005; //const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;} inline int read() {char ch=getchar();int s=0,w=1;while(ch<48||ch>57){if(ch=='-')w=-1;ch=getchar();}while(ch>=48&&ch<=57){s=(s<<1)+(s<<3)+ch-48;ch=getchar();}return s*w; } inline void write(int x) {if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+48); }int n,q,z[maxn],x[maxn]; unordered_map<int,int> fa;int _find(int x){if(fa[x]==0){fa[x]=x;return x;}if(x!=fa[x]) fa[x]=_find(fa[x]);return fa[x]; }signed main(){n=read(),q=read();re(i,1,q)z[i]=read(),x[i]=read(),fa[x[i]]=x[i];re(i,1,q){if(z[i]==1)fa[x[i]]=x[i]+1;else if(z[i]==2)write(_find(x[i])),prn();}return 0; }
C、签到,但是因为题意不清被吐槽为工地英语
传世经典:and each part weighs two times as much as a kilogram
实际意思是切成两半,每一半都是偶数,特判一下2完事
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n;signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;if(n%2==0&&n!=2) cout<<"YES";else cout<<"NO";return 0; }
D、题解写的kmp,被find过穿了,没构造的数据在find面前还是太弱了
题意是给你一个字符串s和t个字符串t,你需要判断他们的关系:
完全一样输出jntm!,长度相同但不一样输出friend!
t比s短并且t是s的子串输出my child!,否则输出oh, child!
t比s长并且s是t的子串输出my teacher!,否则输出senior!
这种输出题最好还是复制样例,不然连oh和child之间的空格都不一定看得见
判断s是不是t的子串套用if(t.find(s)!=t.npos)即可
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}string s,t; int q;signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>s;cin>>q;while(q--){cin>>t;if(s.length()==t.length()){if(s==t) cout<<"jntm!"<<endl;else cout<<"friend!"<<endl;}else if(s.length()>t.length()){if(s.find(t)!=s.npos) cout<<"my child!"<<endl;else cout<<"oh, child!"<<endl;}else{if(t.find(s)!=t.npos) cout<<"my teacher!"<<endl;else cout<<"senior!"<<endl;}}return 0; }
E、(待补)
F、(待补)
G、关于回文自动机参见:http://www.mynameisdhr.com/%e5%9b%9e%e6%96%87%e8%87%aa%e5%8a%a8%e6%9c%ba/
题面是给你一个串,每个回文子串的贡献是当中出现的不同字符个数,统计所有子串的总贡献
回文自动机裸题,建出PAM之后dfs搜答案即可,注意对答案的贡献要乘以本质相同的回文串个数
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}struct PAM{ int tot,last,n,cur; int fail[maxn],len[maxn],cnt[maxn],son[maxn][26],num[maxn]; char s[maxn]; int get(int p,int x){while(s[x-len[p]-1]!=s[x])p=fail[p];return p;} int newnode(int x){len[tot]=x;return tot++;} void build(){ scanf("%s",s+1); s[0]=-1,fail[0]=1,last=0; newnode(0),newnode(-1); for(n=1;s[n];++n){ s[n]-='a'; cur=get(last,n); if(!son[cur][s[n]]){ int now=newnode(len[cur]+2); fail[now]=son[get(fail[cur],n)][s[n]]; num[now]=num[fail[now]]+1;// son[cur][s[n]]=now; } cnt[last=son[cur][s[n]]]++; } for(int i=tot-1;i>=0;--i) cnt[fail[i]]+=cnt[i]; } }pam;int v[26],ans=0;void dfs(int x,int k){if(pam.len[x]>0) ans+=k*pam.cnt[x];fo(i,0,26){if(pam.son[x][i]!=0){if(!v[i]){v[i]=1;dfs(pam.son[x][i],k+1);v[i]=0;}else dfs(pam.son[x][i],k);}} }signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);pam.build();dfs(0,0);dfs(1,0);pr(ans);return 0; }
H、(待补)
I、给你一个n(n<=1e5)个数字的排列,m个询问,询问在[l,r]区间中有多少个i<j使得min(p[i],p[j])=gcd(p[i],p[j])
条件化简一下实际上就是p[i]是p[j]的倍数或者p[j]是p[i]的倍数
考虑到n不太大,也许所有合法的(i,j)可以预先处理好,然后把询问离线,按照右端点大小进行排序,看看有多少个(i,j)落在询问的区间内
到这儿已经基本得到雏形了,一个稍加修改的二维偏序
可以维护关于左端点的权值树状数组,在保证右端点满足大小关系的情况下在左端点位置加一
跟cdq分治不同的是,本题不需要在每次更换询问的时候清空树状数组
代码:
#include <bits/stdc++.h> using namespace std; const int maxn=100005; inline int read() {char ch=getchar();int s=0,w=1;while(ch<48||ch>57){if(ch=='-')w=-1;ch=getchar();}while(ch>=48&&ch<=57){s=(s<<1)+(s<<3)+ch-48;ch=getchar();}return s*w; } inline void write(int x) {if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+48); } // int n,m,l,r,p[maxn],rp[maxn],ans[maxn]; struct node{int l,r;node(int L,int R):l(L),r(R){}bool operator < (const node& o)const{if(r!=o.r) return r<o.r;else return l<o.l;} }; struct query{int l,r,id;query(int L,int R,int I):l(L),r(R),id(I){}bool operator < (const query& o)const{if(r!=o.r) return r<o.r;else return l<o.l;} }; vector<node> pir; vector<query> ask; // int tr[maxn]; inline int lowbit(int x){return x&-x;} inline void add(int x,int y){for(;x<=n;x+=lowbit(x)) tr[x]+=y; } inline int sum(int x){int res=0;for(;x>0;x-=lowbit(x)) res+=tr[x];return res; }int main(){n=read(),m=read();for(int i=1;i<=n;++i)p[i]=read(),rp[p[i]]=i;for(int i=1;i<=n;++i){int cnt=2;while(p[i]*cnt<=n){pir.push_back(node(min(i,rp[p[i]*cnt]),max(i,rp[p[i]*cnt])));cnt++;}}sort(pir.begin(),pir.end()); // for(int i=0;i<pir.size();++i) cout<<pir[i].l<<' '<<pir[i].r<<endl;for(int i=1;i<=m;++i){l=read(),r=read();ask.push_back(query(l,r,i));}sort(ask.begin(),ask.end());int tmp=0;for(int i=0;i<ask.size();++i){while(pir[tmp].r<=ask[i].r&&tmp<pir.size()){ // cout<<pir[tmp].l<<' '<<pir[tmp].r<<endl;add(pir[tmp].l,1);tmp++;}ans[ask[i].id]=sum(n)-sum(ask[i].l-1);}for(int i=1;i<=m;++i)write(ans[i]),printf("\n");return 0; } /* 6 3 1 5 6 2 4 3 3 5 2 3 1 3 */
J、一棵树,默认1为树根
假设当前节点x有k个孩子,那么会在该节点等概率地选择k次,每次选择一个孩子继续dfs,每次dfs都更新最大树高,问你最后正确得到树高的概率是多少
答案以逆元形式输出一个分数即可
考虑树形dp向上转移,不为最大深度的叶子节点概率为0,为最大深度的叶子节点概率为1
一次选择中每个孩子被选中的概率是1/k,选择k次,一开始我以为选择k次是假的,果然WA了
实际上应该考虑在某一次选择中走不到正确位置的概率,为:
sigma((1-dp[son])/k)
那么k次选择之后走不到的概率就是上式的k次方,最后走到的概率就用1减去走不到的概率即可。
注意对于1减去一个大逆元,可以用1减去大逆元再加上模数的方式
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=1000005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=1000000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n,x,y; vei tr[maxn]; int dep[maxn],mx=-inf; int dp[maxn];void dfs1(int x,int f){dep[x]=dep[f]+1;mx=max(mx,dep[x]);fo(i,0,tr[x].size()){if(tr[x][i]!=f)dfs1(tr[x][i],x);} }void dfs2(int x,int f){int k=0,sum=0;fo(i,0,tr[x].size()){if(tr[x][i]!=f) k++;}fo(i,0,tr[x].size()){if(tr[x][i]!=f){dfs2(tr[x][i],x);sum+=(1-dp[tr[x][i]]+MOD)%MOD,sum%=MOD;}}sum=sum*qpow(k,MOD-2)%MOD;sum=qpow(sum,k)%MOD;if(k==0&&dep[x]==mx)dp[x]=1;else if(k==0&&dep[x]!=mx)dp[x]=0;elsedp[x]=(1-sum+MOD)%MOD; }signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);sc(n);re(i,1,n-1) scc(x,y),tr[x].pub(y),tr[y].pub(x);dfs1(1,1);dfs2(1,1);pr(dp[1]);return 0; }
K、给你至多1000个点的集合,你需要找到一个中心点并且加入一些点,使得所有点的对称点都在集合中
你只需要找到最少需要加入的点数,而不需要找到那个中心点。
由于点数较少,考虑n方枚举,首先猜测一个结论,答案构成的中心点一定在某两点的对称中心上,这样才能最小化加入的点数
那么枚举所有两个点,利用map存储它们的中心点出现的次数,答案就是n-最多中心点出现的次数
考虑到n方枚举实际上把每个点对枚举了两次,所以用map维护的时候每次只需要加一即可
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n; int x[maxn],y[maxn]; mpii cnt;signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);sc(n);re(i,1,n) scc(x[i],y[i]),x[i]*=10,y[i]*=10;int mx=-inf;re(i,1,n){re(j,1,n){cnt[(x[i]+x[j])/2*10000000+(y[i]+y[j])/2]++;mx=max(mx,cnt[(x[i]+x[j])/2*10000000+(y[i]+y[j])/2]);}}pr(n-mx);return 0; }
L、(待补)
M、(待补)
转载于:https://www.cnblogs.com/oneman233/p/11483306.html
The Preliminary Contest for ICPC Asia Xuzhou 2019相关推荐
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
XKC , the captain of the basketball team , is directing a train of nn team members. He makes all mem ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 - C Buy Watermelon | 读题
They want to cut the watermelon in two parts, and each part weighs two times as much as a kilogram . ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019【B. so easy】(set 解法 与正解 unordered_map+并查集)
so easy 题目大意 给你两个操作,op=1时,将那个数不可用,op=2时进行查询功能 找到从x开始第一个存在的数 非官方题解 set 内置红黑树,有默认从小到大排序功能,所以我们可以暴力一发,不 ...
- [The Preliminary Contest for ICPC Asia Xuzhou 2019 - 徐州网络赛E] XKC's basketball team
XKC's basketball team XKC , the captain of the basketball team , is directing a train of nn team mem ...
- The Preliminary Contest for ICPC Asia Nanjing 2019 B. super_log (广义欧拉降幂)
In Complexity theory, some functions are nearly O(1)O(1), but it is greater then O(1)O(1). For examp ...
- H. Holy Grail(The Preliminary Contest for ICPC Asia Nanjing 2019题解)
题目链接 As the current heir of a wizarding family with a long history,unfortunately, you find yourself ...
- The Preliminary Contest for ICPC Asia Shanghai 2019 B. Light bulbs(卡了线段树空间的思维题)
传送门:https://nanti.jisuanke.com/t/41399 题目描述 There are NNN light bulbs indexed from 000 to N−1N−1N−1. ...
- The Preliminary Contest for ICPC Asia Shanghai 2019 Light bulbs
https://nanti.jisuanke.com/t/41399 离散差分 #include <iostream> #include <cstring> #include ...
- The Preliminary Contest for ICPC Asia Shanghai 2019 BDL
传送门 B:离散化+差分 #include <bits/stdc++.h> using namespace std; typedef long long ll; struct node{i ...
最新文章
- OpenCV下车牌定位算法实现代码
- BCH网络成功发布第一个商业级别的Token
- Prism V2之旅(1)
- 陶哲轩实分析 习题 13.5.6
- 在叠堆及虚拟化的今天生成树存在的理由
- minhash pyspark 源码分析——hash join table是关键
- php curl post 文件_php curl文件上传$_FILES为空,只有$_POST有值,如何兼容php5.0~5.6各版本...
- Java程序员面试中的多线程问题
- 怎么样武直不打_打HPV疫苗期间意外怀孕?怎么办?
- java中try 与catch的使用
- python opencv轮廓检测_OpenCV 轮廓检测的实现方法
- 数据清洗-python实践
- Auto login to your computer
- nginx curl linux,linux nginx 下通过curl url方式,符以后的参数无效
- 计算机设备序列号都一样,如何使用adb工具
- Vue报错,[WDS] Disconnected!
- java编码规范试题_java编码规范考试题答案完整版.doc
- 《Linux驱动:DM9000网卡驱动分析》
- 利用python在excel中画图
- 短时傅里叶变换STFT(非使用fft函数)
热门文章
- 云开发:微信小程序开发-组件化开发
- 46個不可不知的常識
- HTML中给div加超链接
- 高通7x27a平台UART配置
- (八)苏世民:我的经验和教训:决策(567)
- win10彻底关闭更新
- MFC下载—时间记录
- java计算机毕业设计智慧防疫上报系统服务端源码+数据库+系统+lw文档
- Python Keras ValueError: Layer sequential expects 1 input(s), but it received 2 input tensors. 解决方法
- 锐龙R5 4500 怎么样 相当于什么水平