开个新坑,希望这套题,能在时间无限的情况下题数达到金牌,缓慢更新中。
A:水中之水
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<int, int> P; const int maxn=1e4+10; char s[5][1000]={"Typically Otaku","Eye-opener","Young Traveller","Excellent Traveller","Contemporary Xu Xiake"};; int main() { int T; cin>>T; while(T--) { int t=0; for(int i=0;i<4;i++) { int b;cin>>b; if(b!=0) t++; } cout<<s[t]<<endl; } }
I:左右横跳即可
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<int, int> P; const int maxn=1e5+10; ll a[maxn],pre[maxn]; int main() { int T; cin>>T; while(T--) { int n=0; cin>>n; for(int i=1;i<n;i++){ cin>>a[i]; a[i]+=a[i-1]; pre[i]=pre[i-1]+a[i]; } ll ans=0; cout<<0<<" "; int l=0,r=n; for(int i=1;i<n;i++) { if(i%2==0) { l++; ans+=pre[n-1]-pre[r-1]-pre[l-1]; } else { r--; ans+=a[r]; ans+=pre[n-1]-pre[r]-pre[l]; } cout<<ans; if(i==n-1) cout<<endl; else cout<<" "; } } }
D:用手机模拟一下跑车即可做出来啦!
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<int, int> P; const int maxn=1e5+10; int main() { int T; cin>>T; while(T--) { double a,b,r,d,pai=acos(-1); cin>>a>>b>>r>>d; d=pai/180*d; double jiao=atan(b/(a+r)); double R=sqrt(b*b+(r+a)*(r+a)); if(d>jiao) { printf("%.12lf ",R-r); } else { jiao=jiao-d; double ans=(R*cos(jiao)-r); printf("%.12lf ",ans); } } }
E: 猜一手结论
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<int, int> P; const int maxn=2e2+10; struct dashu { int s[maxn*5]; int flag,len; void ini() { memset(s, 0, sizeof s); flag=len=1; } void pri() { for(int i=0;i<len;i++) { printf("%c",s[len-i-1]+'0'); } } void jinwei() { for(int i=0;i<len;i++) { if(s[i]>9) { s[i+1]+=s[i]/10; s[i]=s[i]%10; len=max(i+2,len); } } } }; bool cmp(dashu d1,dashu d2) { if(d1.flag==1&&d2.flag==1) { if(d1.len>d2.len) return 0; else if(d1.len<d2.len) return 1; else { int len=d1.len; for(int i=0;i<len;i++) if(d1.s[len-1-i]<d2.s[len-1-i]) return 1; else if(d1.s[len-1-i]>d2.s[len-1-i]) return 0; return 1; } } else if(d1.flag==-1&&d2.flag==-1) { if(d1.len>d2.len) return 1; else if(d1.len<d2.len) return 0; else { int len=d1.len; for(int i=0;i<len;i++) if(d1.s[len-1-i]<d2.s[len-1-i]) return 0; else if(d1.s[len-1-i]>d2.s[len-1-i]) return 1; return 1; } }else if(d1.flag==1&&d2.flag==-1) { return 0; }else if(d1.flag==-1&&d2.flag==1) { return 1; } return 1; } dashu add(dashu d1,dashu d2) { dashu ans; ans.ini(); if((d1.flag==1&&d2.flag==1)||(d1.flag==-1&&d2.flag==-1)) { int len=max(d1.len,d2.len); for(int i=0;i<len;i++) ans.s[i]=d1.s[i]+d2.s[i]; ans.len=len; ans.flag=d1.flag; ans.jinwei(); } return ans; } dashu mul(dashu d1,dashu d2) { dashu ans,t; ans.ini(); t.ini(); ans.flag=d1.flag*d2.flag; for(int i=0;i<d1.len;i++) { int chengzi=d1.s[i]; t.ini(); t.len=i+d2.len; for(int j=0;j<d2.len;j++) { t.s[i+j]=chengzi*d2.s[j]; } t.jinwei(); ans=add(ans, t); } if(ans.s[ans.len-1]==0) d1.pri(); return ans; } dashu zhuanhuan(int n) { dashu t2; t2.ini(); for(int j=0;n!=0;j++) { t2.s[j]=n%10; n/=10; t2.len=j+1; } if(t2.s[t2.len-1]==0) cout<<n<<endl; return t2; } char n[maxn]; vector<int> prime; int tong[maxn]; int main() { for(int i=2;;i++) { int flag=0; for(int j=2;j<=sqrt(i);j++) { if(i%j==0) { flag=1; break; } } if(!flag) prime.push_back(i); if(prime.size()>100) break; } int T; cin>>T; while(T--) { memset(tong, 0, sizeof tong); cin>>n; dashu N; N.ini(); int len=strlen(n); for(int i=0;i<len;i++) { N.s[len-1-i]=n[i]-'0'; } N.len=len; dashu t; t.ini(); t.s[0]=1; t.len=1; for(int i=0;;i++) { int p=prime[i]; dashu t2=zhuanhuan(p); t=mul(t2, t); if(cmp(t, N)) { tong[i]--; p=prime[i]+1; for(int j=0;prime[j]<=p;j++) { while(p%prime[j]==0) { p/=prime[j]; tong[j]++; } } } else break; } dashu ans1,ans2; ans1.ini(); ans2.ini(); ans1.s[0]=1; ans2.s[0]=1; for(int i=0;i<maxn;i++) { if(tong[i]==-1) { ans1=mul(ans1, zhuanhuan(prime[i])); // ans1.pri(); // cout<<endl; } else { while (tong[i]!=0) { ans2=mul(ans2, zhuanhuan(prime[i])); tong[i]--; // ans2.pri(); // cout<<endl; } } } ans1.pri(); cout<<"/"; ans2.pri(); cout<<endl; } }
F:就考虑怎么处理数据就行了,然后最短路,但是getline的速度太慢了,被卡了很久
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #include <queue> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<int, int> P; const int maxn=1e3+10; char s[maxn*6][maxn*6]; vector<P> G[maxn][maxn]; int used[maxn][maxn]; P S,T; int count1=0; void L(int x,int y) { int xx=2+4*(x-1); if(y%2==0) { xx+=2; } int yy=4+6*(y-1); if(s[xx][yy]=='S') S=make_pair(x, y); if(s[xx][yy]=='T') T=make_pair(x, y); if(s[xx-2][yy]==' ') G[x][y].push_back(make_pair(x-1, y)); if(s[xx+2][yy]==' ') G[x][y].push_back(make_pair(x+1, y)); if(y%2==0) { if(s[xx-1][yy-3]==' ') G[x][y].push_back(make_pair(x, y-1)); if(s[xx-1][yy+3]==' ') G[x][y].push_back(make_pair(x, y+1)); if(s[xx+1][yy-3]==' ') G[x][y].push_back(make_pair(x+1, y-1)); if(s[xx+1][yy+3]==' ') G[x][y].push_back(make_pair(x+1, y+1)); } else { if(s[xx-1][yy-3]==' ') G[x][y].push_back(make_pair(x-1, y-1)); if(s[xx-1][yy+3]==' ') G[x][y].push_back(make_pair(x-1, y+1)); if(s[xx+1][yy-3]==' ') G[x][y].push_back(make_pair(x, y-1)); if(s[xx+1][yy+3]==' ') G[x][y].push_back(make_pair(x, y+1)); } } int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); count1+=n*m; if(count1>2e6) return 0; getchar(); char c; int i=0; while((c=getchar())!=' ') { s[0][i]=c; i++; } for(int i=0;i<n;i++) { for(int j=i*4+1;j<i*4+4+1;j++) { int k=0; while((c=getchar())!=' ') { s[j][k]=c; k++; } } } int k=0; while((c=getchar())!=' ') { s[4*n+1][k]=c; k++; } k=0; while((c=getchar())!=' ') { s[4*n+2][k]=c; k++; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ used[i][j]=0; G[i][j].clear(); L(i,j); } used[S.first][S.second]=1; queue<P> q; q.push(S); int flag=0; while(!q.empty()) { P t=q.front(); q.pop(); int x=t.first,y=t.second; for(int i=0;i<G[x][y].size();i++) { int nx=G[x][y][i].first,ny=G[x][y][i].second; if(used[nx][ny]==0) { used[nx][ny]=used[x][y]+1; if(nx==::T.first&&ny==::T.second) { flag=1; break; } q.push(make_pair(nx, ny)); } } if(flag) break; } if(used[::T.first][::T.second]==0) { printf("-1 "); } else { printf("%d ",used[::T.first][::T.second]); } } }
B:分类讨论中的好题
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> #include <vector> #include <iostream> #include <queue> #define lson rt<<1 #define rson rt<<1|1 using namespace std; typedef long long ll; typedef pair<ll,ll> P; const int maxn=4e5+10; P J(ll hp,ll f) { ll l=0,r=1e5; while (l<r-1) { ll mid=(r+l)/2; if(mid*(mid+f-1+f)/2<hp) l=mid; else r=mid; } return make_pair(r, r*(r+1)/2-hp); } int main() { int T; cin>>T; while (T--) { ll hpa,hpb,atka,atkb; cin>>hpa>>hpb>>atka>>atkb; ll shanghai1=0,shanghai2=0; P t1=J(hpa,1),t2=J(hpb,1); P t2b=J(hpb-t1.second,t1.first+1),t2a=J(hpa-t2.second,t2.first+1); shanghai1=t1.first*(atkb+atka)+t2b.first*atkb; shanghai2=t2.first*(atka+atkb)+t2a.first*atka; vector<char> ans1,ans2; if(shanghai1<=shanghai2) { ll b_top=hpb-t2b.first*(t2b.first+t1.first+1+t1.first)/2,a_top=t1.second; for(int t=1;t<=t1.first;) { if(t==a_top&&b_top>0){ ans1.push_back('B'); t++; } ans1.push_back('A'); t++; } for(int i=0;i<t2b.first;i++) ans1.push_back('B'); } if(shanghai1>=shanghai2) { ll b_top=t2.second,a_top=hpa-t2a.first*(t2a.first+t2.first+1+t2.first)/2; for(int t=1;t<=t2.first;) { while((b_top-t>t)||(a_top-t<=0&&t<=b_top)) { ans2.push_back('A'); b_top-=t; a_top-=t; t++; } ans2.push_back('B'); t++; } for(int i=0;i<t2a.first;i++) ans2.push_back('A'); } if(ans1.size()!=0&&ans2.size()!=0) { for(int i=0;i<ans1.size();i++) { if(ans1[i]<ans2[i]) { cout<<shanghai1<<" "; for(int i=0;i<ans1.size();i++) cout<<ans1[i]; cout<<endl; break; } else if(ans1[i]>ans2[i]) { cout<<shanghai2<<" "; for(int i=0;i<ans2.size();i++) cout<<ans2[i]; cout<<endl; break; } } }else if(ans1.size()!=0) { cout<<shanghai1<<" "; for(int i=0;i<ans1.size();i++) cout<<ans1[i]; cout<<endl; } else if(ans2.size()!=0) { cout<<shanghai2<<" "; for(int i=0;i<ans2.size();i++) cout<<ans2[i]; cout<<endl; } } }