[关闭]
@baobaobear 2020-04-07T12:04:30.000000Z 字数 7354 阅读 233

练习赛9

practise


A hesorchen

  1. //https://blog.csdn.net/hesorchen
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <cstdlib>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <map>
  10. #include <stack>
  11. #include <list>
  12. #include <set>
  13. #include <queue>
  14. #include <string>
  15. #include <cstring>
  16. using namespace std;
  17. #define ll long long
  18. #define lowbit (a & (-a))
  19. #define endl "\n"
  20. #define PI acos(-1.0)
  21. #define mod 1000000009
  22. #define INF 0x3f3f3f3f
  23. #define MAX 200010
  24. int main()
  25. {
  26. ll a, b;
  27. cin >> a >> b;
  28. cout << a * a - b << endl;
  29. return 0;
  30. }

B 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. struct point{
  7. db x,y;
  8. point(){};
  9. point(db _x,db _y):x(_x),y(_y){}
  10. db len2(){
  11. return x*x+y*y;
  12. }
  13. point operator +(const point& b)const{
  14. return point(x+b.x,y+b.y);
  15. }
  16. point operator -(const point& b)const{
  17. return point(x-b.x,y-b.y);
  18. }
  19. point operator *(const db& k)const{
  20. return point(k*x,k*y);
  21. }
  22. point operator /(const db& k)const{
  23. return point(x/k,y/k);
  24. }
  25. db operator *(const point& b)const{
  26. return x*b.x+y*b.y;
  27. }
  28. };
  29. struct line{
  30. point s,e;
  31. line(){};
  32. point lineprog(point p){
  33. return s+( ((e-s)*((e-s)*(p-s)))/((e-s).len2()) );
  34. }
  35. };
  36. int q;
  37. db sx,sy,ex,ey,qx,qy;
  38. int main(){
  39. cin>>sx>>sy>>ex>>ey;
  40. cin>>q;
  41. line l;
  42. l.s={sx,sy};
  43. l.e={ex,ey};
  44. while(q--){
  45. cin>>qx>>qy;
  46. point ans=l.lineprog({qx,qy});
  47. printf("%.10f %.10f\n",ans.x,ans.y);
  48. }
  49. return 0;
  50. }

C hesorchen

  1. //https://blog.csdn.net/hesorchen
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <cstdlib>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <map>
  10. #include <stack>
  11. #include <list>
  12. #include <set>
  13. #include <queue>
  14. #include <string>
  15. #include <cstring>
  16. using namespace std;
  17. #define ll long long
  18. #define lowbit (a & (-a))
  19. #define endl "\n"
  20. #define PI acos(-1.0)
  21. #define mod 1000000009
  22. #define INF 0x3f3f3f3f
  23. #define MAX 200010
  24. ll p[100];
  25. int main()
  26. {
  27. p[1] = 1;
  28. p[2] = 2;
  29. for (int i = 3; i <= 50; i++)
  30. p[i] = p[i - 1] + p[i - 2];
  31. int t;
  32. cin >> t;
  33. while (t--)
  34. {
  35. ll n, m;
  36. cin >> n >> m;
  37. // ll a = 1;
  38. // ll b = 2;
  39. ll temp = m - n;
  40. cout << p[temp] << endl;
  41. }
  42. return 0;
  43. }

D 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. char s[60];
  7. bool legal(int l,int r){
  8. int bra=0;
  9. for(int i=l;i<=r;i++){
  10. if(s[i]=='('){
  11. bra++;
  12. }
  13. else{
  14. if(bra) bra--;
  15. else return false;
  16. }
  17. }
  18. if(bra) return false;
  19. else return true;
  20. }
  21. int get(int l,int r){
  22. if(r-l+1==2){
  23. return 1;
  24. }
  25. if(legal(l+1,r-1)){
  26. return 2*get(l+1,r-1);
  27. }
  28. for(int i=l+1;i<=r-1;i++){
  29. if(legal(l,i)&&legal(i+1,r)){
  30. return get(l,i)+get(i+1,r);
  31. }
  32. }
  33. assert(0);
  34. }
  35. int main(){
  36. cin>>(s+1);
  37. cout<<get(1,strlen(s+1))<<endl;
  38. return 0;
  39. }

E 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. char s[1010];
  7. int ans[1010];
  8. int main(){
  9. cin>>(s+1);
  10. int n=strlen(s+1);
  11. for(int i=1;i<=n;i++){
  12. if(s[i]=='a'){
  13. while(s[i]=='a') i++;
  14. i--;
  15. ans[i]=1;
  16. }
  17. else{
  18. while(s[i]=='b') i++;
  19. i--;
  20. if(i!=n) ans[i]=1;
  21. }
  22. }
  23. for(int i=1;i<=n;i++){
  24. printf("%d%c",ans[i],(i==n)?'\n':' ');
  25. }
  26. return 0;
  27. }

F 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. char s[310],s1[310],s2[310],ans[310];
  7. int dp[310][310];
  8. int p;
  9. void work(int n1,int n2){
  10. memset(dp,0,sizeof(dp));
  11. for(int i=1;i<=n1;i++){
  12. for(int j=1;j<=n2;j++){
  13. if(s1[i]==s2[j]){
  14. dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
  15. }
  16. dp[i][j]=max(dp[i][j],dp[i-1][j]);
  17. dp[i][j]=max(dp[i][j],dp[i][j-1]);
  18. }
  19. }
  20. }
  21. void get(int i,int j){
  22. if(i==0||j==0){
  23. return ;
  24. }
  25. if(dp[i][j]==dp[i-1][j]){
  26. get(i-1,j);
  27. }
  28. else if(dp[i][j]==dp[i][j-1]){
  29. get(i,j-1);
  30. }
  31. else if(dp[i][j]==dp[i-1][j-1]+1){
  32. assert(s1[i]==s2[j]);
  33. ans[++p]=s[i];
  34. get(i-1,j-1);
  35. }
  36. }
  37. int main(){
  38. while(1){
  39. scanf("%s",s+1);
  40. if(s[1]=='#') break;
  41. int n=strlen(s+1);
  42. p=0;
  43. for(int i=1;i<n;i++){
  44. memset(s1,0,sizeof(s1));
  45. memset(s2,0,sizeof(s2));
  46. for(int j=1;j<=i;j++) s1[j]=s[j];
  47. for(int j=i+1;j<=n;j++) s2[j-i]=s[j];
  48. int n1=strlen(s1+1);
  49. int n2=strlen(s2+1);
  50. work(n1,n2);
  51. if(dp[n1][n2]>p){
  52. p=0;
  53. get(n1,n2);
  54. }
  55. }
  56. for(int i=p;i>=1;i--){
  57. putchar(ans[i]);
  58. }putchar('\n');
  59. }
  60. return 0;
  61. }

G 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. char s[200010];
  7. int kmp[200010],n,t;
  8. void mkkmp(){
  9. int j=0;
  10. for(int i=2;i<=n;i++){
  11. while(j&&s[j+1]!=s[i])
  12. j=kmp[j];
  13. if(s[j+1]==s[i])
  14. j++;
  15. kmp[i]=j;
  16. }
  17. return ;
  18. }
  19. int main(){
  20. cin>>t;
  21. while(t--){
  22. cin>>n;
  23. scanf("%s",s+1);
  24. memset(kmp,0,sizeof(kmp));
  25. mkkmp();
  26. int ans=n;
  27. for(int i=2;i<=n;i++){
  28. int sv=i;
  29. while(kmp[sv]){
  30. ans++;
  31. sv=kmp[sv];
  32. }
  33. }
  34. printf("%d\n",ans%10007);
  35. }
  36. return 0;
  37. }

H 1292224662

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. typedef long long ll;
  5. typedef pair<int,int> pii;
  6. typedef double db;
  7. int t,n,a[100010],p;
  8. char s[40];
  9. struct dic_tree{
  10. int tot;
  11. int nxt[3200010][2];
  12. void clear(){
  13. for(int i=0;i<=tot+5;i++){
  14. nxt[i][0]=nxt[i][1]=0;
  15. }tot=0;
  16. }
  17. void insert(char* s){
  18. int now=0;
  19. for(int i=1;i<=32;i++){
  20. if(nxt[now][s[i]-'0']){
  21. now=nxt[now][s[i]-'0'];
  22. }
  23. else{
  24. nxt[now][s[i]-'0']=++tot;
  25. now=tot;
  26. }
  27. }
  28. }
  29. int query(char* s){
  30. int now=0,ans=0;
  31. for(int i=1;i<=32;i++){
  32. if(nxt[now][1-(s[i]-'0')]){
  33. ans=ans*2+1;
  34. now=nxt[now][1-(s[i]-'0')];
  35. }
  36. else{
  37. ans=ans*2;
  38. now=nxt[now][s[i]-'0'];
  39. }
  40. }
  41. return ans;
  42. }
  43. }tree;
  44. void itos(int x){
  45. for(int i=1;i<=32;i++){
  46. s[i]=(x&1)+'0';
  47. x>>=1;
  48. }
  49. for(int i=1;i<=16;i++){
  50. swap(s[i],s[33-i]);
  51. }
  52. }
  53. int main(){
  54. cin>>t;
  55. while(t--){
  56. cin>>n;
  57. for(int i=1;i<=n;i++){
  58. scanf("%d",a+i);
  59. itos(a[i]);
  60. tree.insert(s);
  61. }
  62. int ans=0;
  63. for(int i=1;i<=n;i++){
  64. itos(a[i]);
  65. ans=max(ans,tree.query(s));
  66. }
  67. printf("%d\n",ans);
  68. tree.clear();
  69. }
  70. return 0;
  71. }

I 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. typedef double db;
  6. int n,mod=1000000009;
  7. int a[110][110];
  8. int dis[110][110],vis[110][110],way[110][110];
  9. int dx[]={0,1,0,-1};
  10. int dy[]={1,0,-1,0};
  11. bool ok(pii pos){
  12. int xx=pos.first,yy=pos.second;
  13. if(xx<1||yy<1||xx>n||yy>n)
  14. return false;
  15. if(xx+yy>=n+1)
  16. return false;
  17. return true;
  18. }
  19. int main(){
  20. while(1){
  21. cin>>n;
  22. if(!n) break;
  23. for(int i=1;i<=n;i++){
  24. for(int j=1;j<=n;j++){
  25. scanf("%d",&a[i][j]);
  26. }
  27. }
  28. for(int i=1;i<=n;i++){
  29. for(int j=1;j+i<n+1;j++){
  30. a[i][j]+=a[n+1-j][n+1-i];
  31. }
  32. }
  33. memset(dis,0x3f,sizeof(dis));
  34. memset(vis,0,sizeof(vis));
  35. memset(way,0,sizeof(way));
  36. queue<pii> q;
  37. q.push({1,1});vis[1][1]=1;
  38. dis[1][1]=0;
  39. while(!q.empty()){
  40. pii now=q.front();q.pop();
  41. vis[now.first][now.second]=0;
  42. for(int i=0;i<4;i++){
  43. pii to={now.first+dx[i],now.second+dy[i]};
  44. if(dis[to.first][to.second]>dis[now.first][now.second]+a[to.first][to.second]){
  45. dis[to.first][to.second]=dis[now.first][now.second]+a[to.first][to.second];
  46. if(ok(to)&&vis[to.first][to.second]==0){
  47. vis[to.first][to.second]=1;
  48. q.push({to.first,to.second});
  49. }
  50. }
  51. }
  52. }
  53. int mn=1e9;
  54. for(int i=1;i<=n;i++){
  55. mn=min(dis[i][n+1-i],mn);
  56. }
  57. for(int i=1;i<=n;i++){
  58. if(dis[i][n+1-i]==mn){
  59. q.push({i,n+1-i});
  60. way[i][n+1-i]=1;
  61. vis[i][n+1-i]=1;
  62. }
  63. }
  64. while(!q.empty()){
  65. pii now=q.front();q.pop();
  66. for(int i=0;i<4;i++){
  67. pii to={now.first+dx[i],now.second+dy[i]};
  68. if(dis[to.first][to.second]+a[now.first][now.second]==dis[now.first][now.second]){
  69. way[to.first][to.second]+=way[now.first][now.second];
  70. way[to.first][to.second]%=mod;
  71. if(ok(to)&&vis[to.first][to.second]==0){
  72. q.push({to.first,to.second});
  73. vis[to.first][to.second]=1;
  74. }
  75. }
  76. }
  77. }
  78. printf("%d\n",way[1][1]%mod);
  79. }
  80. return 0;
  81. }

J puluo

  1. #include<stack>
  2. #include<iostream>
  3. using namespace std;
  4. int pre[1000006],maxer[1000006];
  5. int max(int a,int b)
  6. {
  7. return a>b?a:b;
  8. }
  9. int main()
  10. {
  11. int n,m,p,tmp;
  12. char c;
  13. stack<int>left,right;
  14. while(scanf("%d",&n)!=EOF)
  15. {
  16. while(!left.empty())left.pop();
  17. while(!right.empty())right.pop();
  18. for(int i=0;i<=n+1;i++)maxer[i]=-999999999;
  19. p=0;
  20. while(n--)
  21. {
  22. getchar();
  23. scanf("%c",&c);
  24. if(c=='I')
  25. {
  26. scanf("%d",&m);
  27. left.push(m);
  28. p++;
  29. if(p>1)pre[p]=pre[p-1]+m;
  30. else pre[p]=m;
  31. maxer[p]=max(maxer[p-1],pre[p]);
  32. }
  33. if(c=='D'&&!left.empty())
  34. {
  35. left.pop();
  36. p--;
  37. }
  38. if(c=='L'&&!left.empty())
  39. {
  40. tmp=left.top();
  41. right.push(tmp);
  42. left.pop();
  43. p--;
  44. /*pre[p]=pre[p-1]+tmp;
  45. maxer[p]=max(maxer[p-1],pre[p]);*/
  46. }
  47. if(c=='R'&&!right.empty())
  48. {
  49. tmp=right.top();
  50. right.pop();
  51. left.push(tmp);
  52. p++;
  53. pre[p]=pre[p-1]+tmp;
  54. maxer[p]=max(maxer[p-1],pre[p]);
  55. }
  56. if(c=='Q')
  57. {
  58. scanf("%d",&m);
  59. printf("%d\n",maxer[m]);
  60. }
  61. }
  62. }
  63. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注