title : “山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)
date : 2022-5-30
tags : ACM,题解,练习记录
author : Linno


“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)

题目链接:https://ac.nowcoder.com/acm/contest/34980

补题进度:6/13

A-Seventeen

如果有4个连续的数可以构造两加两减抵消的情况,因此只要考虑前几项的解即可。

//#pragma GCC optimize("Ofast", "inline", "-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int N=2e5+7;
const int mod=1e9+7;//int read(){ int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
//void write(int x){if(x>9) write(x/10);putchar(x%10+'0');}int n;
string str[55];void Solve(){str[1]="-1";str[2]="-1";str[3]="-1";str[4]="(4+1)*3+2";str[5]="3*5+1*(4-2)";str[6]="1-2+3+4+5+6";str[7]="2+3+4+7+(6-5)*1";str[8]="1+3+4+6+(5-2)*(8-7)";cin>>n;if(n<=4){cout<<str[n]<<"\n";}else{while(n>8){cout<<n<<"+"<<n-3<<"-"<<n-2<<"-"<<n-1<<"+";n-=4;}cout<<str[n]<<"\n";}
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//  freopen("in.cpp","r",stdin);
//  freopen("out.cpp","w",stdout);int T=1;
//  cin>>T;
//  clock_t start,finish;
//  start=clock();while(T--){Solve();}
//  finish=clock();
//  cerr<<((double)finish-start)/CLOCKS_PER_SEC<<endl;  return 0;
}

B-Minimum Expression

简单DP,但是高精。把程序写出来转化为Python代码即可。

dp=[ [-1 for j in range(1005)] for i in range(1005)]
S=[ [0 for j in range(1005)] for i in range(1005)]
n,m=map(int,input().split())st='.'+input()k=3
m+=1
lst=n//mdef get(l,r):res=0if(S[l][r]!=0):return S[l][r]for i in range(l,r+1):res=res*10+int(st[i])S[l][r]=resreturn resdp[0][0]=0#dp[1][k][0]=dp[1][k][1]=a[1][1]
for i in range(1,n+1):for j in range(1,m+1):for x in range(i-lst-k,i-lst+k):if x<0 or x>=i or dp[x][j-1]==-1:continueif dp[i][j]==-1 or dp[i][j]>dp[x][j-1]+get(x+1,i):dp[i][j]=dp[x][j-1]+get(x+1,i)print(dp[n][m])

C-Convex

D-The Matrix

E-Subsegments

将 a i a_i ai​转化为前缀积形式,再用逆元就变成了统计 S r ≡ i n v ( S l − 1 ) ∗ x S_r \equiv inv(S_{l-1})*x Sr​≡inv(Sl−1​)∗x

有0的情况要断开另算,剩下的用树状数组解决即可。

//#pragma GCC optimize("Ofast", "inline", "-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define int long long
#define lb(x) (x&(-x))
using namespace std;
const int N=5e5+7;
const int mod=998244353;//int read(){  int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
//void write(int x){if(x>9) write(x/10);putchar(x%10+'0');}int fpow(int a,int b){int res=1;while(b){res=res*a%mod;a=a*a%mod;b>>=1; }return res;
}inline int inv(int x){return fpow(x,mod-2);
}int n,X,a[N],ans=0;
map<int,int>cnt;void Solve(){cin>>n>>X;a[0]=1;if(X==0){ //那么我们就找0的位置然后左右扩展就好了 int lst=0;for(int i=1;i<=n;++i){cin>>a[i];if(a[i]==0){ //所有 ans+=i;lst=i; //记录最后一个0的位置        }else{ans+=i;ans-=i-lst;} } cout<<ans<<"\n";return;}for(int i=1;i<=n;++i){ cin>>a[i];if(a[i]==0){ //如果有0的话,就要断开了 a[i]=1;//fg=1; //断开之后要重新计算 cnt.clear(); continue;} a[i]*=a[i-1]; //变成前缀积的形式a[i]%=mod;++cnt[X*a[i-1]%mod]; //另一端可以是自己的 ans+=cnt[a[i]]; //对应左端点的个数//cout<<i<<" "<<ans<<"!!\n"; }cout<<ans<<"\n";
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//  freopen("in.cpp","r",stdin);
//  freopen("out.cpp","w",stdout);int T=1;
//  cin>>T;
//  clock_t start,finish;
//  start=clock();while(T--){Solve();}
//  finish=clock();
//  cerr<<((double)finish-start)/CLOCKS_PER_SEC<<endl;  return 0;
}

F-selection

G-Corona Virus

H-Counting

签到题,直接模拟即可。

//#pragma GCC optimize("Ofast", "inline", "-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
//#define int long long
#define mk make_pair
#define pii pair<int,int>
using namespace std;
const int N=3007,M=2007;
const int mod=1e9+7;
typedef long long ll;int n,m,k,t,cnt[M][M];
char str[N][N];
pii pos[N];int read(){  int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
void write(ll x){if(x>9) write(x/10);putchar(x%10+'0');}void Solve(){n=read();m=read();k=read();t=read();for(int i=1,x,y;i<=k;++i){x=read();y=read();pos[i]={x,y};}for(int i=1;i<=k;++i){scanf("%s",str[i]);str[i][t]='!';}for(int i=0;i<=t;i++){long long nowans=0;for(int j=1;j<=k;++j){ //统计当前答案 nowans+=cnt[pos[j].first][pos[j].second];++cnt[pos[j].first][pos[j].second];}write(nowans);putchar('\n');for(int j=1;j<=k;++j){--cnt[pos[j].first][pos[j].second];if(str[j][i]=='L') pos[j]={pos[j].first,pos[j].second-1};if(str[j][i]=='R') pos[j]={pos[j].first,pos[j].second+1};if(str[j][i]=='U') pos[j]={pos[j].first-1,pos[j].second};if(str[j][i]=='D') pos[j]={pos[j].first+1,pos[j].second}; }}
}signed main(){//  ios::sync_with_stdio(0);
//  cin.tie(0);cout.tie(0);
//  freopen("in.cpp","r",stdin);
//  freopen("out.cpp","w",stdout);int T=1;
//  cin>>T;
//  clock_t start,finish;
//  start=clock();while(T--){Solve();}
//  finish=clock();
//  cerr<<((double)finish-start)/CLOCKS_PER_SEC<<endl;  return 0;
}

I-gcds

J-Football Match

四个角用向量解决,然后手算个比例得到中心连上面和下面的点形成的向量与AB的倍数关系得到五角星边上的两个点,最后用绕点旋转解决剩下的点坐标即可。

//#pragma GCC optimize("Ofast", "inline", "-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define int long long
#define db double
using namespace std;
const int N=2e5+7;
const int mod=1e9+7;
const double pi=acos(-1.0);
const double eps=1e-8;
//int read(){   int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
//void write(int x){if(x>9) write(x/10);putchar(x%10+'0');}struct P{db x,y;P(db X=0,db Y=0){x=X,y=Y;}inline void in(){scanf("%lf%lf",&x,&y);}inline void out(){printf("%.6lf %.6lf ",x,y);}
}a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;inline db Dot(P a,P b){return a.x*b.x+a.y*b.y;}//【点积】inline db Cro(P a,P b){return a.x*b.y-a.y*b.x;}//【叉积】
inline db Len(P a){return sqrt(Dot(a,a));}//【模长】inline P turn_PP(P a,P b,db theta){//【将点A绕点B顺时针旋转theta(弧度)】db x=(a.x-b.x)*cos(theta)+(a.y-b.y)*sin(theta)+b.x;db y=-(a.x-b.x)*sin(theta)+(a.y-b.y)*cos(theta)+b.y;return P(x,y);
}double ps,r;void Solve(){a.in();b.in();P v1(b.x-a.x,b.y-a.y);P v2(3*v1.y/2,-3*v1.x/2);d.x=a.x+v2.x,d.y=a.y+v2.y;c.x=b.x+v2.x,c.y=b.y+v2.y;o.x=(a.x+c.x)/2.0,o.y=(a.y+c.y)/2.0,r=Len(v2)/6.0,ps=sin(pi*18/180.0)/sin(pi*126/180.0);//五角星长轴为r,短轴为r*pse.x=o.x+v1.x*3/10,e.y=o.y+v1.y*3/10; //长轴/4 j.x=o.x-v1.x*3/10*ps,j.y=o.y-v1.y*3/10*ps; //短轴g=turn_PP(e,o,pi*2/5);i=turn_PP(e,o,pi*4/5);k=turn_PP(e,o,pi*6/5);m=turn_PP(e,o,pi*8/5);l=turn_PP(j,o,pi*2/5);n=turn_PP(j,o,pi*4/5);f=turn_PP(j,o,pi*6/5);h=turn_PP(j,o,pi*8/5);c.out();d.out();e.out();f.out();g.out();h.out();i.out();j.out();k.out();l.out();m.out();n.out();
}signed main(){//  ios::sync_with_stdio(0);
//  cin.tie(0);cout.tie(0);
//  freopen("in.cpp","r",stdin);
//  freopen("out.cpp","w",stdout);int T=1;cin>>T;
//  clock_t start,finish;
//  start=clock();while(T--){Solve();}
//  finish=clock();
//  cerr<<((double)finish-start)/CLOCKS_PER_SEC<<endl;  return 0;
}

K-Coins

数量大的时候肯定是Alice更占优势,并且那些数肯定能由质数相加得到。只需要对小数据进行完全背包即可。

//#pragma GCC optimize("Ofast", "inline", "-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
//#define int long long
using namespace std;
const int N=2e6+7;
const int mod=1e9+7;//int read(){ int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
//void write(int x){if(x>9) write(x/10);putchar(x%10+'0');}int a[5],b[5];
int pa[N],pb[N];void Solve(){memset(pa,inf,sizeof(pa));memset(pb,inf,sizeof(pb)); a[1]=2;a[2]=3;a[3]=17;a[4]=19;b[1]=5;b[2]=7;b[3]=11;b[4]=13;pa[0]=pb[0]=0;for(int i=1;i<=4;++i){for(int j=0;j<10000;++j){if(j>=a[i]) pa[j]=min(pa[j-a[i]]+1,pa[j]);if(j>=b[i]) pb[j]=min(pb[j-b[i]]+1,pb[j]);}}//for(int i=1;i<=100000;++i) cout<<i<<" "<<pa[i]<<" "<<pb[i]<<"!!\n";int q,x;cin>>q;for(int i=1;i<=q;++i){cin>>x;if(x>=200){  //肯定A用的少 cout<<"A\n";}else if(pa[x]==inf&&pb[x]==inf){cout<<"-1\n";} //都做不到 else if(pa[x]==inf){cout<<"B\n";} else if(pb[x]==inf){cout<<"A\n";}else if(pa[x]==pb[x]) cout<<"both\n";else if(pa[x]<pb[x]) cout<<"A\n";else cout<<"B\n";}
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//  freopen("in.cpp","r",stdin);
//  freopen("out.cpp","w",stdout);int T=1;
//  cin>>T;
//  clock_t start,finish;
//  start=clock();while(T--){Solve();}
//  finish=clock();
//  cerr<<((double)finish-start)/CLOCKS_PER_SEC<<endl;  return 0;
}

L-Segment

M-Travel Round the Grid

【超好懂的比赛题解】“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)相关推荐

  1. “山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛

    打星队的菜比来补题啦 A - Seventeen(构造,签到) 用1~n所有数字用+,-,*,(,),组成计算式使得其得数为17. 思路:找规律可得,小于4绝对无法组成17,当n为4时,可使得(4+1 ...

  2. 黑龙江计算机比赛,第十二届东北地区大学生程序设计竞赛和第十三届黑龙江省大学生程序设计竞赛在我校成功举行...

    2018年5月18日至20日,第十三届黑龙江省大学生程序设计竞赛和第十二届东北地区大学生程序设计竞赛在我校隆重举行.副校长刘胜辉.教务处长宋清昆分别代表组委会致欢迎辞,并宣布比赛开幕.黑龙江省计算机学 ...

  3. 湖南中医药大学信息科学与工程学院第四届大学生程序设计竞赛——正式赛题解

    目录 问题A:X星人的统计 问题B:X星人的报数 问题C:X星人的迷宫 问题D:X星人的高考 问题E:X星人的匹配 问题F:X星人的成绩 问题G:X星人的变换 问题H:X星人的游戏 问题I:X星人的宝 ...

  4. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)

    "亚信科技杯"南邮第七届大学生程序设计竞赛之网络预赛 比赛链接http://acm.njupt.edu.cn/acmhome/contest.do?&method=cont ...

  5. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (K L题解)

    "亚信科技杯"南邮第七届大学生程序设计竞赛之网络预赛 (K L题解) 第一次出题,果然背锅了,L题由于数据问题,让两种不对的方法ac了,分别是:H<0时取前一天送上花(应该是 ...

  6. 【超好懂的比赛题解】HNCPC Multi-university Training Round3 比赛题解

    title : HNCPC Multi-university Training Round3 date : 2022-7-29 tags :ACM,练习记录 author : LINNO HNCPC ...

  7. 【超好懂的比赛题解】第十八届同济大学程序设计竞赛暨高校网络友谊赛

    title : 第十八届同济大学程序设计竞赛暨高校网络友谊赛 date : 2022-5-30 tags : ACM,题解,练习记录 author : Linno 第十八届同济大学程序设计竞赛暨高校网 ...

  8. 【超好懂的比赛题解】2020ICPC澳门站 个人题解

    title : 2021ICPC澳门站 个人题解 date : 2022-10-6 tags : ACM,题解,练习记录 author : Linno 2020ICPC澳门站 个人题解 题目链接:ht ...

  9. 河南省第十三届ICPC大学生程序设计竞赛 【部分题题解】

    比赛参加了,打的很垃圾. 霸爷说过:一个人要不是比别人大几个数量级,其实是很难比别人强的. 努力变强,到达巅峰. 目录 A: 祝融传火 E: Dance with a stick F: 图像识别 H: ...

最新文章

  1. android荧光进度条,CSS3 彩色荧光棒进度条
  2. catia 创成钣金设计_8、钣金件设计-降低钣金成本的设计
  3. SAP日记之一-漫漫自学路
  4. ubuntu 14 nginx php,ubuntu14.04安装nginx+php5-fpm
  5. 永恒边境白羊座服务器维护,永恒边境升级攻略 速升50级技巧
  6. 发布 项目_项目发布会活动到底应该怎么办
  7. Windows Phone 7 立体旋转动画的实现
  8. poj 2051 Argus
  9. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
  10. VueRouter安装使用教程
  11. 动态ARP检测原理及应用
  12. DeepFace: Closing the Gap to Human-Level Performance in Face Verification
  13. BigDecimal,BigInteger 学习以及简单示例
  14. 虚拟机挂起后硬盘响应变慢,SCSI转IDE方法
  15. “拼多多和短视频极速版”,让我怎么吐槽你好呢!
  16. spi sync async
  17. jks bks 等的定义 如何将jks转化为bks的
  18. 首个中文全词类知识库-百科知识树 开源啦!搭配开源标注工具,一招搞定知识关联!...
  19. 切比雪夫不等式例题讲解_2019高考数学大题押题(名师视频讲解,高考最后的提分机会)...
  20. python基础之数据类型III

热门文章

  1. Java和HTML有什么关系_jsp和html之间有什么区别?
  2. MATLAB模拟伽尔顿板实验
  3. 杯具,知名游戏的源码丢了;iOS 11 第三个开发者测试版发布
  4. Windows共享内存详解
  5. ArcPy 使用Shp批量裁剪栅格 Clip
  6. Java JNA (五)—— 释放Memory对象分配的内存
  7. codeforces Simple Skewness
  8. 阿里妈妈矢量图标使用
  9. Java编程也要从娃娃抓起
  10. android如何实现微信功能吗,android 借助AccessibilityService实现模拟点击功能-微信助手(一)...