0x013 基本数据结构-链表与邻接表
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define ll long long
const int N=1e6+10;
int n,a;
set<pair<int,int>> s;//第一个存数字,第二个存序号
int main(){
cin>>n;
cin>>a;
s.insert(make_pair(a,1));
for(int i=2;i<=n;i++){
cin>>a;
pair<int,int> ans,x;
s.insert(make_pair(a,i));
set<pair<int,int> >::iterator it=s.find(make_pair(a,i));
set<pair<int,int> >::iterator r=s.find(make_pair(a,i));
r++;
ans.first=INT_MAX;
if(r!=s.end()){
ans=make_pair((*r).first-a,(*r).second);
}
if(it--!=s.begin()&&(a-(*it).first)<=ans.first){
ans=make_pair(a-(*it).first,(*it).second);
}
cout<<ans.first<<" "<<ans.second<<endl;
}
}
B 兔子与兔子
1.题意:
2.题解:
3.ac代码:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define ll long long
const int N=1e6+10;
ll f[N],p[N];
char s[N];
int main(){
int n,i;
scanf("%s",s+1);
int n1=strlen(s+1);
p[0]=1;
for(i=1;i<=n1;i++){
f[i]=f[i-1]*131+s[i]-'a'+1;
p[i]=p[i-1]*131;
}
cin>>n;
int l1,r1,l2,r2;
for(i=0;i<n;i++){
cin>>l1>>r1>>l2>>r2;
if((f[r1]-f[l1-1]*p[r1-l1+1])==(f[r2]-f[l2-1]*p[r2-l2+1]))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
A Snowflake Snow Snowflakes
1.题意:
2.题解:
最小表示法
3.ac代码:
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define ll long long
const int N=1e6+10;
int n,a;
int snows[N][6];
int k;
void get_min(int a[]){//最小表示法
int b[12];
for(int i=0;i<12;i++)
b[i]=a[i%6];
int i=0,j=1,k=0;
while(i<6&&j<6){
for(k=0;k<6&&b[i+k]==b[j+k];k++);
if(k==6)
break;
if(b[i+k]>b[j+k]){
i=i+k+1;
if(i==j)
i++;
}else if(b[k+j]>b[i+k]){
j=j+k+1;
if(i==j)
j++;
}
}
k=min(i,j);
for(i=0;i<6;i++){
a[i]=b[i+k];
}
}
bool cmp_arr(int a[],int b[]){//从小到大,数组排序
for(int i=0;i<6;i++){
if(a[i]>b[i])
return false;
else if(a[i]<b[i])
return true;
}
return false;
}
bool cmp(int a,int b){
return cmp_arr(snows[a],snows[b]);
}
int id[N];
int main(){
cin>>n;
for(int i=0;i<n;i++){
memset(snows[i],0,sizeof(snows[0]));
}
int snow[6],isnow[6];
for(int i=0;i<n;i++){
for(int j=0,k=5;j<6;j++,k--){
cin>>snow[j];
isnow[k]=snow[j];
}
get_min(snow);
get_min(isnow);
if(cmp_arr(snow,isnow)){
memcpy(snows[i],snow,sizeof(snow));
}else{
memcpy(snows[i],isnow,sizeof(isnow));
}
id[i]=i;
}
sort(id,id+n,cmp);
bool flag=false;
for(int i=1;i<n;i++){
if(!cmp(id[i-1],id[i])&&!cmp(id[i],id[i-1])){
flag=true;
break;
}
}
if(flag)
cout<<"Twin snowflakes found."<<endl;
else
cout<<"No two snowflakes are alike."<<endl;
}