798B
来源:互联网 发布:php mysql支持 编辑:程序博客网 时间:2024/06/14 05:52
自己当时打算用bfs,,结果MLE了。。
想想简直太傻了。。
没有利用好条件,,条件说只会把最前面的放到最后面去。。
这个时候就应该想到之前看过的,,把两个字符串合并在一起啊。。(这个不是就是KMP的吗。。)(看来是思维没有掌握。。)
分析:肯定是把所有串变成其中一个原本就有的串是最优的。。。(我无法证明。。我是弄了一个各种可能。。)
我的代码奇丑务必,放在最后。。
#include<iostream>#include<string>using namespace std;void change(string &s){s=s.substr(1)+s.substr(0,1);//这样用。。。 我居然还弄了个string tmp。}int main(){int n;cin>>n;string s[n];for(int i=0;i<n;i++)cin>>s[i];int ans=0x7fffffff,sum;for(int i=0;i<n;i++){sum=0;for(int j=0;j<n;j++){string t=s[j];while(t!=s[i]){change(t);sum++;if(sum>3000){ans=-1;break;}}}ans=min(ans,sum);}cout<<ans<<endl;}
#include <bits/stdc++.h>using namespace std;typedef unsigned long long ll; int main() { int n; cin>>n; string s; vector<string>v,u; for(int i=0;i<n;i++) { cin>>s; v.push_back(s); s+=s; u.push_back(s); } int a; int m=10000; for (int i=0;i<n;i++) { int b=0; for (int j=0;j<n;j++) { a=u[j].find(v[i]);//注意 string 的find函数返回的是数组的下标。。是会有0 的,在这里刚好是改变次数。 if (a==-1) {cout<<-1; return 0;} b+=a; } m=min(b,m); } cout<<m; }
我使用二分的。。
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>#include<vector>#define ll long long#define inf 0x3f3f3f3f#define INF 1000000000#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;using namespace std;#define sf scanf#define pf printf#define mem(a,b) memset(a,b,sizeof(a));string s[55];vector<string>name;int n;int ID(string a){ for(int i=0;i<name.size();++i){ if(a==name[i])return i+1; } name.push_back(a); return name.size();}int a[55];int maxx;int len;bool ok(int x){ for(int i=1;i<=maxx;++i){ int tmp=0; for(int j=1;j<=n;++j){ if(a[j]>i){ tmp+=maxx-(a[j]-i); } else tmp+=i-a[j]; } if(tmp<=x){ return true;} } return false;}int main(){ while(cin>>n){ cin>>s[1]; for(int i=2;i<=n;++i){ cin>>s[i]; } len=s[1].length(); string tmp; maxx=0; tmp=s[1]; for(int i=0;i<len;++i){ maxx=max(maxx,ID(tmp)); string ttmp=tmp.substr(1,len-1); tmp=ttmp+tmp[0]; } for(int i=2;i<=n;++i){ int flag=1; for(int j=0;j<maxx;++j){ if(s[i]==name[j]){ flag=0;break; } } if(flag){ pf("-1\n");return 0; } } for(int i=1;i<=n;++i){ a[i]=ID(s[i]); } int l=0,r=1e5; while(l<r){ int mid=(r+l)>>1; if(ok(mid))r=mid; else l=mid+1; } pf("%d\n",r); }}
0 0
- 798B
- codeforces 798B
- codeforces 798B
- b
- b
- b
- //b
- B
- b
- B
- B
- B
- B
- b
- B
- B
- B
- B
- box-shadow的内外阴影
- 重定向和请求转发的区别
- oracle安全管理
- [DLLImport C# UWP] UWP use DLL compiled by VS2015 C++
- 【IMWeb训练营作业】组件间通讯
- 798B
- [JZOJ5083].【GDSOI2017第三轮模拟】Gift
- python中的list和array的区别
- servlet生命周期
- java 基础用法
- echarts散点图使用(转:http://www.suchso.com/UIweb/echarts-sandiantu.html)
- Yii 2.0 笔记之 rules 验证规则
- 微信开发三 接收普通消息
- java基础心得(2)