编号 | 名称 | 通过率 | 通过人数 | 提交人数 |
A√水题(队友写的 | Visiting Peking University | 91% | 1122 | 1228 |
B— | Reverse Suffix Array | 57% | 68 | 119 |
C 最大子矩阵和 | Matrix | 51% | 182 | 353 |
D缩点/二分/数位dp | Agent Communication | 11% | 23 | 209 |
E凸包 | Territorial Dispute | 57% | 327 | 567 |
F— | Cake | 15% | 15 | 95 |
G√找规律 | Bounce | 74% | 456 | 609 |
H— | Polynomial Product | 51% | 17 | 33 |
I√线段树 | Minimum | 77% | 861 | 1110 |
J最短路 | Typist's Problem | 57% | 44 | 77 |

#include <iostream> #include <cmath> #include <cstdio> #include <cctype> #include <cstdlib> #include <cstring> #include <climits> #include <set> #include <map> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <numeric> #include <sstream> #include <algorithm> #include <functional> using namespace std; typedef long long ll; #define PI acos(-1.0) #define INF 0x3f3f3f3f #define EPS 1e-8 #define MOD 1e9+7 #define max_ 1005 #define maxn 100 int p[max_]; bool vi[max_]; pair<int,int> c[max_]; int main() { int n,m,q; while(~scanf("%d%d",&n,&m)) { int length=0; for(int i=0;i<n;i++) { scanf("%d",&p[i]); vi[i]=true; } scanf("%d",&q); while(q--) { int c; scanf("%d",&c); vi[c]=false; } for(int i=0;i<n;i++) if(vi[i]) { c[length].first=p[i]; c[length++].second=i; } int minn=INF; int aa,bb; for(int i=0;i+m<=length;i++) { int x=c[i].first; for(int j=1;j<m;j++) { if(c[i+j].first+x<minn) { minn=c[i+j].first+x; aa=c[i].second; bb=c[i+j].second; } } } printf("%d %d ",aa,bb); } return 0; }

#include <iostream> #include <cmath> #include <cstdio> #include <cctype> #include <cstdlib> #include <cstring> #include <climits> #include <set> #include <map> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <numeric> #include <sstream> #include <algorithm> #include <functional> using namespace std; typedef long long ll; #define PI acos(-1.0) #define INF 0x3f3f3f3f #define EPS 1e-8 #define MOD 1e9+7 #define max_ 270000 pair<int,int> tree[max_]; int minn,maxx; void add(int rt,int l,int r,int v,int x) { if(l==r) tree[rt].first=tree[rt].second=x; else { int mid=(l+r)>>1; if(mid>=v) add(rt<<1,l,mid,v,x); else add(rt<<1|1,mid+1,r,v,x); tree[rt].first=min(tree[rt<<1].first,tree[rt<<1|1].first); tree[rt].second=max(tree[rt<<1].second,tree[rt<<1|1].second); } } void query(int rt,int l,int r,int L,int R) { if(L>=l&&R<=r) { minn=min(minn,tree[rt].first); maxx=max(maxx,tree[rt].second); } else { int mid=(L+R)>>1; if(mid>=l) query(rt<<1,l,r,L,mid); if(mid<r) query(rt<<1|1,l,r,mid+1,R); } } int main() { int k; int t; scanf("%d",&t); while(t--) { scanf("%d",&k); int e=pow(2,k); for(int i=1;i<=e;i++) { int tmp; scanf("%d",&tmp); add(1,1,e,i,tmp); } int q; scanf("%d",&q); while(q--) { int op; scanf("%d",&op); if(op==1) { int l,r; scanf("%d%d",&l,&r); l++,r++; minn=INF,maxx=-INF; query(1,l,r,1,e); ll ans; if(minn>=0) { ans=minn; ans*=ans; } else if(maxx>=0) { ans=minn; ans*=maxx; } else { ans=maxx; ans*=maxx; } printf("%lld ",ans); } else { int x,y; scanf("%d%d",&x,&y); add(1,1,e,x+1,y); } } } return 0; }

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int p[105]; int l[105]; struct Node { int day; int cost; }node[105]; int main() { int n, m; while (scanf("%d%d", &n, &m) != EOF) { memset(l, 0, sizeof(l)); for (int i = 0; i < n; i++) { scanf("%d", &p[i]); } int ln,x; scanf("%d", &ln); for (int i = 0; i < ln; i++) { scanf("%d", &l[i]); } sort(l, l + ln); int now = 0; int now_node = 0; for (int i = 0; i < n; i++) { if (i == l[now]&&now<ln) { now++; continue; } node[now_node].day = i; node[now_node].cost = p[i]; now_node++; } int min = 0x3f3f3f3f; int left = 0, right = 0; for (int i = 0; i <= now_node-m; i++) { for (int j = i + 1; j < i + m; j++) { if (node[i].cost + node[j].cost < min) { min = node[i].cost + node[j].cost; left = node[i].day; right = node[j].day; } } } printf("%d %d ", left,right); } }

#include <iostream> #include <cmath> #include <cstdio> #include <cctype> #include <cstdlib> #include <cstring> #include <climits> #include <set> #include <map> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <numeric> #include <sstream> #include <algorithm> #include <functional> using namespace std; typedef long long ll; #define PI acos(-1.0) #define INF 0x3f3f3f3f #define EPS 1e-8 #define MOD 1e9+7 #define max_ 270000 ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } int main() { ll xx,yy,cc,dd,n,a,b; while(~scanf("%lld%lld",&xx,&yy)) { xx-=1; yy-=1; if(xx<yy) swap(xx,yy); n = xx*yy / gcd(xx,yy); a = n/yy; b = n/xx; if(b!=1) { cc=(xx+yy-1)/yy; dd=a-cc-cc+1; if(b!=2) { n-=(dd%(b-2))*(b-1); dd/=(b-2); n-=dd*(b-2)*(b-1); } n-=(cc-1)*(b-1)*2; } n++; printf("%lld ",n); } return 0; }

#include <bits/stdc++.h> #define mem(a,b) memset((a),(b),sizeof(a)) #define MP make_pair #define pb push_back #define fi first #define se second #define sz(x) x.size() using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; const ll LLINF=0x3f3f3f3f3f3f3f3f; const double PI=acos(-1.0); const double eps=1e-8; const int MAX=2e5+10; const ll mod=1e9+7; int sgn(double x) { if(fabs(x)<eps) return 0; else return x>0?1:-1; } struct Point { int id; double x,y; Point(){} Point(double a,double b) { x=a; y=b; } void input() { scanf("%lf%lf",&x,&y); } }; typedef Point Vector; Vector operator -(Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);} bool operator <(Point a,Point b){return a.x<b.x||(a.x==b.x&&a.y<b.y);} bool operator ==(Point a,Point b){return sgn(a.x-b.x)==0&&sgn(a.y-b.y)==0;} double dot(Vector a,Vector b){return a.x*b.x+a.y*b.y;} double cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;} vector<Point> graham(vector<Point> p) { int n,m,k,i; sort(p.begin(),p.end()); p.erase(unique(p.begin(),p.end()),p.end()); n=p.size(); m=0; vector<Point> res(n+1); for(i=0;i<n;i++) { while(m>1&&cross(res[m-1]-res[m-2],p[i]-res[m-2])<=0) m--; res[m++]=p[i]; } k=m; for(i=n-2;i>=0;i--) { while(m>k&&cross(res[m-1]-res[m-2],p[i]-res[m-2])<=0) m--; res[m++]=p[i]; } if(n>1) m--; res.resize(m); return res; } char ans[111]; int main() { int t,n,i; scanf("%d",&t); while(t--) { scanf("%d",&n); vector<Point> v; Point p[111]; for(i=0;i<n;i++) { p[i].input(); p[i].id=i; v.pb(p[i]); } if(n<=2) { puts("NO"); continue; } vector<Point> res=graham(v); mem(ans,0); if(sz(res)==n) { if(n==3) { puts("NO"); continue; } int flag=0; for(i=0;i<sz(res);i++) { ans[res[i].id]='A'+flag; flag=(flag+1)%2; } } else { for(i=0;i<sz(res);i++) { ans[res[i].id]='A'; } for(i=0;i<n;i++) { if(ans[i]!='A') ans[i]='B'; } } ans[n]='