A
题意 :六个数 是否存在 分成 2堆三个数,且这两堆数相等
emmm,全排类忘了排序,rejugde 又错了 ,想哭o(╥﹏╥)o
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll num[100005];
int main()
{
int t;
int a[6];
for(int i=0;i<6;i++)
{
cin>>a[i];
}
sort(a,a+6);
int f=0;
do{
if((a[0]+a[1]+a[2])==(a[3]+a[4]+a[5]))
{
f=1;
}
}while(next_permutation(a,a+6));
if(f==1)
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
return 0;
}
B
题意 : n次访问 咖啡馆,问 ,访问所有咖啡馆最后的咖啡馆中,最早访问的咖啡馆是哪一个
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[200005];
bool vis[200005];
int tn[200005];
vector<int>v;
int main()
{
int t;
int a[6];
int ans=0;
int n;
while(cin>>n)
{
v.clear();
num[0]=-1;
memset(vis,0,sizeof(0));
for(int i=1;i<=n;i++)
{
cin>>num[i];
if(vis[num[i]]==0)
{
vis[num[i]]=1;
v.push_back(num[i]);
}
tn[num[i]]=i;
}
int mi=200005;
for(int i=0;i<v.size();i++)
{
if(mi>tn[v[i]])
{
mi=tn[v[i]];
}
}
cout<<num[mi]<<endl;
}
return 0;
}
C
题意: n个 记录,时间从0 开始,0时间不记录,之后分钟 记录一次 时间,如果 第一次访问这个房间就写下小于这个时间的非负数,如果不是第一次访问这个房间就记录最近上一次访问这个房间的时间。
现在给出你n 个记录,让你求 最少 访问了不同的房间数目
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[200005];
bool vis[200005];
int tn[200005];
vector<int>v;
int main()
{
int t;
int a[6];
int ans=0;
int n;
while(cin>>n)
{
v.clear();
num[0]=-1;
memset(vis,0,sizeof(0));
for(int i=1;i<=n;i++)
{
cin>>num[i];
if(vis[num[i]]==0)
{
vis[num[i]]=1;
v.push_back(num[i]);
}
tn[num[i]]=i;
}
int mi=200005;
for(int i=0;i<v.size();i++)
{
if(mi>tn[v[i]])
{
mi=tn[v[i]];
}
}
cout<<num[mi]<<endl;
}
return 0;
}
D
代码虽然丑但还是过了 (补题
玄学 ,加了一个 最后每个字符都要出现 就ac了 (忘了判断自环
以后要注意 代码规范了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool vis[26];
vector<int>mapp[26];
int ma[26][26];
int ingree[26];
int degree[26];
int single[26];
int one[26];
string ans="";
void dfs(int x)
{
for(int i=0;i<mapp[x].size();i++)
{
ans+=mapp[x][i]+'a';
dfs(mapp[x][i]);
}
}
bool fan[26];
bool fan2[26];
int main()
{
int n;
string str;
int cn=0;
while(cin>>n)
{
int f=1;
cn=0;
memset(single,0,sizeof(single));
for(int ii=1;ii<=n;ii++)
{
cin>>str;
memset(vis,0,sizeof(vis));
for(int i=0;i<str.size()-1;i++)
{
if(vis[str[i]-'a']==0)
{
if(ma[str[i]-'a'][str[i+1]-'a']==0)
{
mapp[str[i]-'a'].push_back(str[i+1]-'a');
degree[str[i]-'a']++;
ingree[str[i+1]-'a']++;
ma[str[i]-'a'][str[i+1]-'a']=1;
}
vis[str[i]-'a']=1;
}
else
{
f=0;
}
fan[str[i]-'a']=1;
}
fan[str[str.size()-1]-'a']=1;
if( vis[str[str.size()-1]]==1)
{
f=0;
}
if(str.size()==1)
{
one[str[0]-'a']=1;
}
}
for(int i=0;i<26;i++)
{
if(ingree[i]>1||degree[i]>1)
{
f=0;
}
if(degree[i]==1&&ingree[i]==0)
single[i]=1;
if(one[i]==1&&(degree[i]==0&&ingree[i]==0))
{
single[i]=1;
}
}
if(f==0)
{
cout<<"NO"<<endl;
}
else
{
for(int i=0;i<26;i++)
{
if(single[i]==1)
{
ans+=i+'a';
dfs(i);
}
}
for(int i=0;i<ans.size();i++)
{
fan2[ans[i]-'a']=1;
}
for(int i=0;i<26;i++)
{
if(fan[i]!=fan2[i])
f=0;
}
if(ans!=""&&f)
cout<<ans<<endl;
else
{
cout<<"NO"<<endl;
}
}
}
return 0;
}