目录
3346. 你知道你的ABC吗【排序】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL a[15];
int main(void)
{
for(int i=0;i<7;i++) cin>>a[i];
sort(a,a+7);
LL b=a[6]-a[4];
LL a1=a[6]-a[5];
LL c=a[6]-a1-b;
cout<<a1<<" "<<b<<" "<<c<<endl;
return 0;
}
3358. 放养但没有完全放养【贪心】
就看下一个字母是在它的前面还是后面,再后面说明可以是同一首,否则重新起一首。
#include<bits/stdc++.h>
using namespace std;
string a,b;
int cnt[35];
int main(void)
{
cin>>a>>b;
for(int i=0;i<a.size();i++) cnt[a[i]-'a']=i;
int last=-1,ans=1;
for(int i=0;i<b.size();i++)
{
if(cnt[b[i]-'a']>last) last=cnt[b[i]-'a'];
else ans++,last=cnt[b[i]-'a'];
}
cout<<ans;
}
3370. 牛年【模拟】
说明他们的相对位置是唯一确定的。
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
map<string,int>d;
string s[12]={
"Ox","Tiger","Rabbit","Dragon","Snake","Horse","Goat","Monkey","Rooster","Dog","Pig","Rat"};
int main(void)
{
int t; cin>>t;
mp["Bessie"]=0,d["Bessie"]=0;
string a; getline(cin,a);
for(int i=0;i<t;i++)
{
getline(cin,a);
string name1=a.substr(0,a.find(' '));
string name2=a.substr(a.rfind(' ')+1);
int k=0;
for(int i=0;i<12;i++)//找到属相
{
if(a.find(s[i])!=-1)
{
k=i; break;
}
}
mp[name1]=k;
if(a.find("previous")!=-1)
{
if(mp[name1]>=mp[name2]) d[name1]=d[name2]-(12-mp[name1]+mp[name2]);//上一周期
else d[name1]=d[name2]-(mp[name2]-mp[name1]);//同一周期
}else
{
if(mp[name1]<=mp[name2]) d[name1]=d[name2]+(12-mp[name2]+mp[name1]);//下一周期
else d[name1]=d[name2]+(mp[name1]-mp[name2]);//同一周期
}
}
cout<<abs(d["Elsie"]);
return 0;
}
3745. 牛的学术圈 I【二分】
注意:每个论文最多加1.
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5+10;
LL n,m,a[N];
bool check(int mid)
{
int cnt=0,sum=0;
for(int i=n-1;i>=0;i--)
{
if(a[i]>=mid) cnt++;
else
{
if(a[i]+1>=mid&&sum<m) sum++,cnt++;
else break;
}
}
return cnt>=mid;
}
int main(void)
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int l=0,r=n;
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
1459. 奶牛体操【暴力】
#include<bits/stdc++.h>
using namespace std;
const int N=25;
int a[N][N],n,m;
int main(void)
{
cin>>m>>n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
int ans=0;
for(int i=1;i<=n;i++)
{
int cnt[N]={
0};
for(int j=0;j<m;j++)
{
int index=0;
for(int k=0;k<n;k++)
if(a[j][k]==i) {
index=k;break;}//找到位置
for(int k=index+1;k<n;k++) cnt[a[j][k]]++;//在他后面的
}
for(int j=1;j<=n;j++)
if(cnt[j]==m) ans++;
}
cout<<ans;
return 0;
}
1442. 单词处理器【模拟】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
string a[N];
int n,m;
int main(void)
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
int sum=0;
for(int i=0;i<n;i++)
{
if(sum+a[i].size()<=m) cout<<a[i]<<" ",sum+=a[i].size();
else puts(""),sum=a[i].size(),cout<<a[i]<<" ";
}
return 0;
}