博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.5 模拟赛
阅读量:4976 次
发布时间:2019-06-12

本文共 4077 字,大约阅读时间需要 13 分钟。

T1  

树状数组求逆序对+大特判 

#include 
#include
#include
#define N 205using namespace std;inline void Read(int &x){ register char ch=getchar(); for(x=0;!isdigit(ch);ch=getchar()); for(;isdigit(ch);x=x*10+ch-'0',ch=getchar());}int Maxna,Maxnb,tag[N],sum,n,k,a[N],b[N],c[N],all,pos[N],flag;inline int lowbit(int x) {
return x&(-x);}inline int max(int a,int b) {
return a>b?a:b;}inline int query(int x){ int ret=0; for(;x;x-=lowbit(x)) ret+=tag[x]; return ret;}inline void modify(int x,int y) {
for(;x<=n;x+=lowbit(x)) tag[x]+=y;}int Main(){ Read(n);Read(k); for(int i=1;i<=n;++i) { Read(a[i]); if(!a[i]) pos[++all]=i; else flag=i,Maxna=max(Maxna,a[i]); c[i]=a[i]; } for(int i=1;i<=k;++i) Read(b[i]),Maxnb=max(Maxnb,b[i]); if(all==n&&k!=1) {printf("Yes\n");return 0;} if(pos[1]>flag) { if(k==1&&Maxnb
Maxna) {printf("No\n");return 0;} else {printf("Yes\n");return 0;} } sort(b+1,b+1+k); for(int i=1;i<=all;++i) a[pos[i]]=b[i],c[pos[i]]=b[i]; sort(c+1,c+1+n); int Size=unique(c+1,c+1+n)-c-1; for(int i=n;i>=1;--i) { int rank=lower_bound(c+1,c+1+Size,a[i])-c; if(rank-1) sum+=query(rank-1); modify(rank,1); } if(k>1) { if(sum>=0) printf("Yes\n"); else printf("No\n"); } else if(sum>0) printf("Yes\n"); else printf("No\n"); return 0;}int sb=Main();int main() {;}

T2

暴力dfs

#include 
#include
#include
#define N 1005inline void Read(int &x){ register char ch=getchar(); for(x=0;!isdigit(ch);ch=getchar()); for(;isdigit(ch);x=x*10+ch-'0',ch=getchar());}bool use[N];int n,a[N],b[N],pos[N],all,ans[N];bool check(){ int x=0,y=0,z=0; for(int i=1;i<=n;++i) { if(ans[i]==a[i]) x++; if(ans[i]==b[i]) y++; } if((x==n-1)&&(y==n-1)) return 1; else return 0;}void dfs(int num){ if(num==all+1) { if(check()) {
for(int i=1;i<=n;++i) printf("%d ",ans[i]);exit(0);} return; } for(int i=1;i<=n;++i) { if(!use[i]) { use[i]=1; ans[pos[num]]=i; dfs(num+1); use[i]=0; } }}int main(){ Read(n); for(int i=1;i<=n;++i) Read(a[i]); for(int i=1;i<=n;++i) { Read(b[i]); if(a[i]==b[i]) ans[i]=a[i],use[a[i]]=1; else pos[++all]=i; } dfs(1); return 0;}

T3

正解dp。。自动弃疗

#include 
#include
#define N 1505int pos[27][N],num[27],n,q;char str[N],c;int main(){ scanf("%d",&n);char ch=getchar(); for(int i=1;i<=n;++i) scanf("%c",&str[i]),pos[str[i]-'a'][++num[str[i]-'a']]=i; scanf("%d",&q); for(int x,f,ans;q--;) { f=ans=0;scanf("%d %c",&x,&c); if(x==n-num[c-'a']||n==num[c-'a']) {printf("%d\n",n);continue;} if(num[c-'a']==1) {printf("%d\n",1+x);continue;} for(int i=2;i<=num[c-'a'];++i) { if(x<=0) break; if(pos[c-'a'][i]-pos[c-'a'][i-1]-1<=x) ans+=pos[c-'a'][i]-pos[c-'a'][i-1]-1,x-=pos[c-'a'][i]-pos[c-'a'][i-1]-1,f=i; else x--,ans++; } ans+x+f>=n?printf("%d\n",n):printf("%d\n",ans+x+f); } return 0;}
35分暴力
#include 
#include
#define N 1505int x,f[27][N],n,q;char str[N],c;bool check(int l){ int p=c-'a'; for(int i=1;i<=n-l+1;++i) if(f[p][i+l-1]-f[p][i-1]>=l-x) return false; return true;}int main(){ scanf("%d",&n);char ch=getchar(); for(int i=1;i<=n;++i) { for(int j=0;j<26;++j) f[j][i]=f[j][i-1]; scanf("%c",&str[i]); ++f[str[i]-'a'][i]; } scanf("%d",&q); for(int l,r,mid,ans;q--;) { scanf("%d %c",&x,&c); for(l=0,r=n+1;l<=r;) { mid=(l+r)>>1; if(check(mid)) r=mid-1; else l=mid+1; } printf("%d\n",l-1); } return 0;}
“稍微”看题解的二分

 

/*第一题3次第二题1次第三题6次前两题没看题解。。自我感觉良好。。哎 毕竟菜鸡的自我安慰*/

 

转载于:https://www.cnblogs.com/ruojisun/p/7482117.html

你可能感兴趣的文章
js表单反显
查看>>
浪潮之巅阅读笔记二
查看>>
CSS内嵌样式实现打字效果
查看>>
从 HTTP 到 HTTPS 再到 HSTS
查看>>
python - class类 (六) 三大特性 - 多态
查看>>
JAVA普通内部类的用法
查看>>
C++ Windows 获取CPU利用率【转】
查看>>
linux环境下 C++性能测试工具 gprof + kprof + gprof2dot【转】
查看>>
SpringMVC------在运行项目的时候run as 里面没有run on server 解决办法
查看>>
Win10+Anaconda3+Eclipse+Django+MySQL 配置Python的Web开发环境
查看>>
类方法使用
查看>>
Get Luffy Out poj 2723 Tarjan+2-SAT
查看>>
Wild Number (Standard IO)
查看>>
在Visual Studio 2005中调试SQL Server 2005的存储过程
查看>>
浅析C#基于TCP协议的SCOKET通信
查看>>
文件资源使用Texture管理cocosBuilder项目资源:纹理文件使用(TexturePacker)
查看>>
Java Web应用CAS Client端的配置详解
查看>>
MapGIS计算瓦片数据集
查看>>
你最美好的年华
查看>>
中兴MF667S WCDMA猫Linux拨号笔记
查看>>