我这个傻逼被治了一下午。
大好的橘势,两个小时6T,去看L,哇傻逼题。然后我跑的最短路T到自闭
最后十几分钟去想了下A,一直在想如何表示状态。。就是想不到二进制搞一下。。。
然后游戏结束了。。以后我就是蓝名之耻了。(注:此称号送给一场比赛里排名最低的蓝名选手)
所以非常凄惨到现在也只有8个,,我还想AK来着,,毕竟有紫名选手AK了,那我1800多分也差不多叭
注意:堆优化dijkstra的复杂度是mlogm!!!
注意:堆优化dijkstra的复杂度是mlogm!!!
注意:堆优化dijkstra的复杂度是mlogm!!!
A:貌似有奇怪的式子或者更佳的转移方式?
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll mod = 1e9+7; 5 ll f[2][8]; 6 int n; 7 void init(){ 8 f[0^1][7]=1; 9 int cnt=0; 10 while (cnt<n){ 11 cnt++; 12 int i=cnt%2; 13 f[i^1][0]=f[i][7]; 14 15 f[i^1][1]=f[i][6]; 16 17 f[i^1][2]=f[i][5]; 18 19 f[i^1][3]=f[i][7]+f[i][4]; 20 21 f[i^1][4]=f[i][3]; 22 23 f[i^1][5]=f[i][2]; 24 25 f[i^1][6]=f[i][7]+f[i][1]; 26 27 f[i^1][7]=f[i][6]+f[i][3]+f[i][0]; 28 29 for(int j=0;j<=7;j++){ 30 f[i^1][j]%=mod; 31 } 32 } 33 } 34 int main(){ 35 ios::sync_with_stdio(false); 36 cin>>n; 37 init(); 38 if(n&1){ 39 cout<<min(f[0][7],f[1][7]); 40 } else{ 41 cout<<max(f[0][7],f[1][7]); 42 } 43 }
B:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 string s; 5 int main(){ 6 ios::sync_with_stdio(false); 7 cin>>s; 8 int nc=0,ns=0; 9 for(int i=0;i<s.length();i++){ 10 if(s[i]=='C'&&nc<2){ 11 nc++;ns=0; 12 cout<<'B'; 13 } else if(s[i]=='C'&&nc==2){ 14 cout<<'P'; 15 nc=0;ns=0; 16 } else if(s[i]=='S'&&ns<2){ 17 ns++;cout<<'D';nc=0; 18 } else{ 19 ns=0;nc=0;cout<<'T'; 20 } 21 } 22 }
C:
D:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int n;ll s; 5 int main(){ 6 ios::sync_with_stdio(false); 7 cin>>n; 8 while (n--){ 9 cin>>s; 10 ll l=0,r=15e8; 11 while (l<=r){ 12 ll mid = l+r>>1; 13 if((mid+1)*mid/2<=s){ 14 l=mid+1; 15 } else { 16 r=mid-1; 17 } 18 } 19 cout<<r<<endl; 20 } 21 }
E:
F:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 1e5+5; 5 int n,m; 6 struct Edge{ 7 int u,v; 8 }e[N]; 9 int a[N],ans[N]; 10 int fa[N]; 11 int find(int x){ 12 return x==fa[x]?x:fa[x]=find(fa[x]); 13 } 14 int main(){ 15 ios::sync_with_stdio(false); 16 cin>>n>>m; 17 for(int i=1;i<=m;i++){ 18 fa[i]=i; 19 cin>>e[i].v>>e[i].u; 20 } 21 for(int i=1;i<=m;i++){ 22 cin>>a[i]; 23 } 24 ans[m+1]=n; 25 for(int i=m;i>=1;i--){ 26 int u=find(e[a[i]].u),v=find(e[a[i]].v); 27 if(u==v){ 28 ans[i]=ans[i+1]; 29 } else{ 30 fa[u]=v; 31 ans[i]=ans[i+1]-1; 32 } 33 } 34 for(int i=2;i<=m+1;i++){ 35 cout<<ans[i]<<endl; 36 } 37 }
G:
H:被坑了好久才反应过来
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 double n,a,p; 5 int main(){ 6 scanf("%lf%lf%lf",&n,&a,&p); 7 p/=100; 8 double x = p-(1-p); 9 n+=a*x; 10 printf("%.10f ",n); 11 }
I:判点在多边形内部板子
#include <bits/stdc++.h> using namespace std; typedef double db; const db eps=1e-6; const db pi=acos(-1); int sign(db k){ if (k>eps) return 1; else if (k<-eps) return -1; return 0; } int cmp(db k1,db k2){return sign(k1-k2);} int inmid(db k1,db k2,db k3){ return sign(k1-k3)*sign(k2-k3)<=0;} struct point { db x,y; point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};} point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};} point operator * (db k1) const{return (point){x*k1,y*k1};} point operator / (db k1) const{return (point){x/k1,y/k1};} bool operator == (const point &k1) const{return cmp(x,k1.x)==0&&cmp(y,k1.y)==0;} db abs(){ return sqrt(x*x+y*y);} db abs2(){return x*x+y*y;} db dis(point k1){ return (*this-k1).abs();} bool operator<(const point &k1)const{ int c = cmp(x,k1.x); if(c)return c==-1; return cmp(y,k1.y)==-1; } }; int inmid(point k1,point k2,point k3){return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);} db cross(point k1,point k2){ return k1.x*k2.y-k1.y*k2.x;} int onS(point k1,point k2,point q){return inmid(k1,k2,q)&&sign(cross(k1-q,k2-k1))==0;} db dot(point k1,point k2){ return k1.x*k2.x+k1.y*k2.y;} vector<point> convexHull(vector<point> ps){ int n = ps.size();if(n<=1)return ps; sort(ps.begin(),ps.end()); vector<point> qs(n*2);int k = 0; for(int i=0;i<n;qs[k++]=ps[i++]) while (k>1&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k; for(int i=n-2,t=k;i>=0;qs[k++]=ps[i--]) while (k>t&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k; qs.resize(k-1); return qs; } int contain(vector<point>A,point q){//0外边 int pd=0;A.push_back(A[0]); for(int i=1;i<A.size();i++){ point u=A[i-1],v=A[i]; if(onS(u,v,q))return 1;if (cmp(u.y,v.y)>0) swap(u,v); if(cmp(u.y,q.y)>=0||cmp(v.y,q.y)<0)continue; if(sign(cross(u-v,q-v))<0)pd^=1; } return pd<<1; } vector<point>p[5]; int s,r,m; int n; point tmp; int main(){ scanf("%d%d%d",&s,&r,&m); for(int i=1;i<=s;i++){ scanf("%lf%lf",&tmp.x,&tmp.y);p[1].push_back(tmp); } for(int i=1;i<=r;i++){ scanf("%lf%lf",&tmp.x,&tmp.y);p[2].push_back(tmp); } for(int i=1;i<=m;i++){ scanf("%lf%lf",&tmp.x,&tmp.y);p[3].push_back(tmp); } scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lf%lf",&tmp.x,&tmp.y); if(contain(p[1],tmp)){ printf("Sheena "); } else if(contain(p[2],tmp)){ printf("Rose "); } else if(contain(p[3],tmp)){ printf("Maria "); } else{ printf("Outside "); } } }
J:反着来维护区间和
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 1e6+6; 5 int n; 6 int a[N],c[N]; 7 int lowbit(int k){ return k&-k;} 8 void upd(int pos,int num){ 9 while (pos<=1e6+1){ 10 c[pos]+=num; 11 pos+=lowbit(pos); 12 } 13 } 14 int sum(int pos){ 15 int res = 0; 16 while (pos>0){ 17 res+=c[pos]; 18 pos-=lowbit(pos); 19 } 20 return res; 21 } 22 int ans[N]; 23 int main(){ 24 scanf("%d",&n); 25 for(int i=1;i<=n;i++){ 26 cin>>a[i];a[i]++; 27 ans[i] = n-(i-1-sum(a[i]-1)); 28 upd(a[i],1); 29 } 30 for(int i=1;i<=n;i++){ 31 printf("%d ",ans[i]); 32 } 33 }
K:dij加一维维护模数。。好傻逼啊我的天。。为什么我这么傻逼啊。。因为终点只能走一次所以不能来更新其他节点,判断一下就好。
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 2e5+5; 5 struct Edge{int v,w,nxt;}; 6 Edge e[500010]; 7 int head[100010],cnt=0; 8 void addEdge(int u,int v,int w){ 9 e[++cnt].v=v; 10 e[cnt].w=w; 11 e[cnt].nxt=head[u]; 12 head[u]=cnt; 13 } 14 int dis[100010][3]; 15 struct node{ 16 int u,d,res; 17 bool operator <(const node&rhs)const { 18 return d>rhs.d; 19 } 20 }; 21 int n,m; 22 void Dijkstra(){ 23 for(int i=1;i<=n;i++)for(int j=0;j<3;j++)dis[i][j]=2147483647; 24 dis[1][0]=0; 25 priority_queue<node> Q; 26 Q.push((node){1,0,0}); 27 while (!Q.empty()){ 28 node fr=Q.top();Q.pop(); 29 int u=fr.u,d=fr.d,r=fr.res; 30 if(d>dis[u][r])continue; 31 if(u==n)continue; 32 for(int i=head[u];i;i=e[i].nxt){ 33 int v = e[i].v,w=e[i].w; 34 if(dis[u][r]+w<dis[v][(r+1)%3]){ 35 dis[v][(r+1)%3]=dis[u][r]+w; 36 Q.push((node){v,dis[v][(r+1)%3],(r+1)%3}); 37 } 38 } 39 } 40 } 41 int dep[N]; 42 void pa(){cout<<"me"<<endl;} 43 void pb(){cout<<"Gon"<<endl;} 44 void pc(){cout<<"Killua"<<endl;} 45 int main(){ 46 ios::sync_with_stdio(false); 47 cin>>n>>m; 48 int u,v,w; 49 while(m--){ 50 cin>>u>>v>>w; 51 addEdge(u,v,w); 52 addEdge(v,u,w); 53 } 54 Dijkstra(); 55 int a=dis[n][0],b=dis[n][1],c=dis[n][2]; 56 if(a<=b&&a<=c){ 57 pa(); 58 if(b<=c)pb(),pc(); 59 else pc(),pb(); 60 } else if(b<=a&&b<=c){ 61 pb(); 62 if(a<=c)pa(),pc(); 63 else pc(),pa(); 64 } else{ 65 pc(); 66 if(b<=a)pb(),pa(); 67 else pa(),pb(); 68 } 69 }
L:为什么这么傻逼的O(n)的做法我当时会想不到呢。。。
1 #include <bits/stdc++.h> 2 #define pii pair<int,int> 3 #define mk(a,b) make_pair(a,b) 4 using namespace std; 5 typedef long long ll; 6 vector<int> g[100005]; 7 map<pii,int> mp; 8 struct Node{ 9 int x,y; 10 }node[100005]; 11 bool cmp(Node a,Node b){ return a.x<b.x;} 12 int n,l; 13 int dep[100005]; 14 void dfs(int v){ 15 for(int i=0;i<g[v].size();i++){ 16 int u = g[v][i]; 17 if(dep[v]+1>dep[u]) { 18 dep[u]=dep[v]+1; 19 dfs(u); 20 } 21 } 22 } 23 int main(){ 24 scanf("%d%d",&n,&l); 25 node[1]={0,0}; 26 mp[mk(0,0)]=0; 27 for(int i=1;i<=n;i++){ 28 scanf("%d%d",&node[i].x,&node[i].y); 29 } 30 sort(node+1,node+1+n,cmp); 31 for(int i=1;i<=n;i++){ 32 mp[mk(node[i].x,node[i].y)]=i; 33 } 34 node[n+1]={l,0}; 35 mp[mk(l,0)]=n+1; 36 for(int i=0;i<=n;i++){ 37 for(int j=1;j<=5;j++){ 38 for(int k=-(5-j);k<=(5-j);k++){ 39 if(!mp.count(mk(node[i].x+j,node[i].y+k)))continue; 40 if(abs(j)+abs(k)<=5){ 41 g[i].push_back(mp[mk(node[i].x+j,node[i].y+k)]); 42 } 43 } 44 } 45 } 46 memset(dep,-0x3f, sizeof(dep)); 47 dep[0]=0; 48 for(int i=0;i<=n;i++){ 49 for(int j=0;j<g[i].size();j++){ 50 int u = g[i][j]; 51 dep[u]=max(dep[u],dep[i]+1); 52 } 53 } 54 printf("%d ",dep[n+1]-1); 55 }
总结。打的太烂了。L被治了,A题好像也没带脑子。K看了两眼没兴趣,其他的没看。。。在两个小时以后就失去了生命迹象。。。
补题的话。如果下周四补了就是补了,否则应该就是不补了。。。(囤了好十几道题了我好慌啊!!!)
md等我过几天上紫了非得开教练模式爽一爽。越切越想要教练模式。。。