2020.10.3天梯赛补题
本次比赛暴露了自身很多问题。
1 ,1题我忽略了数据的输入,在数据输入环节出了问题,即如果一个人输了输入终止。我还没有理解好题意,如果同输或同赢就谁都不喝酒。
#include<bits/stdc++.h>
#include<algorithm>
#define ll long long
using namespace std;
const ll nl=1e5+5;
ll a[nl][4];
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int main(){
ll n,m;
cin>>n;
cin>>m;
ll n1=0,mm=0;
ll t;
cin>>t;
while(t--){
ll a,b,c,d;
cin>>a>>b>>c>>d;
if(b==a+c&&d!=a+c){
n--;
n1++;
if(n==-1){
cout<<"A"<<endl;
cout<<mm<<endl;
break;
}
}
if(d==a+c&&b!=a+c){
m--;
mm++;
if(m==-1){
cout<<"B"<<endl;
cout<<n1<<endl;
break;
}
}
}
}
9题,这题就是判断两个人的关系,本来想用并查集,但不太熟悉,就定义了一个二维数组存两个人的关系。特别的如果两人敌对再遍历一遍判断两人的关系。注意:敌人的敌人不一定不是朋友(这是很容易忽略的地方)。
#include<algorithm>
#define ll long long
using namespace std;
const ll nl=1e5+5;
int al[101][101]={0};
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int main(){
speed_up;
int n,m,k;
cin>>n>>m>>k;
int i;
int a,b,c;
cin>>a;
cin>>b;
cin>>c;
al[a][b]=c;
al[b][a]=c;
}
for(i=1;i<=k;i++){
int d,e;
cin>>d;
cin>>e;
if(al[d][e]==-1){
int j;
int flag=0;
for(j=1;j<=m;j++){
if(al[d][j]*al[e][j]==1){
cout<<"OK but..."<<endl;
flag=1;
break;
}
}
if(flag==0){
cout<<"No way"<<endl;
}
}else if(al[e][d]==0){
cout<<"OK"<<endl;
}else if(al[e][d]==1){
cout<<"No problem"<<endl;
}
}
}
using namespace std;
#define ll long long
int main(){
string a;
getline(cin,a);
ll i;
ll n;
n=a.size();
ll sum=0;
ll z=0;
if(n==1){
cout<<1<<endl;
z=1;
}
for(i=1;i<n-1;i++){
ll q=i-1;
ll p=i+1;
ll num=1;
while(q>=0&&p<=n-1){
if(a[q]==a[p]){
num+=2;
q--;
p++;
}else{
break;
}
}
if(sum<num){
sum=num;
}
}
for(i=0;i<=n-1;i++){
ll q=i;
ll p=i+1;
ll num=0;
while(q>=0&&p<=n-1){
if(a[q]==a[p]){
num+=2;
q--;
p++;
}else{
break;
}
}
if(sum<num){
sum=num;
}
}
if(z==0){
cout<<sum<<endl;
}
}
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+5;
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
struct point{
string num;
ll next;
ll front;
}points[N];
int main(){
ll Head;
ll n;
cin>>Head>>n;
ll End;
ll i;
for(i=0;i<n;i++){
int head,next;
string num;
cin>>head>>num>>next;
points[head].num=num;
points[head].next=next;
if(next!=-1){
points[next].front=head;
}else{
End=head;
}
}
while(Head!=End){
printf("%05d ", End);
cout<<points[End].num;
printf(" %05d\n", Head);
End=points[End].front;
if(Head==End){
break;
}
printf("%05d ", Head);
cout<<points[Head].num;
printf(" %05d\n", End);
Head=points[Head].next;
}
printf("%05d ", Head);
cout<<points[Head].num;
cout<<" -1"<<endl;
return 0;
}
#include<algorithm>
#define ll long long
using namespace std;
const ll nl=1e4+5;
ll a[nl][2];
int main(){
speed_up;
ll n,m;
cin>>n;
cin>>m;
ll i;
for(i=0;i<m;i++){
cin>>a[i][0];
cin>>a[i][1];
}
ll k;
cin>>k;
ll j;
while(k--){
ll ok=0;
set<int>s;
ll t;
cin>>t;
for(j=0;j<t;j++){
ll q;
cin>>q;
s.insert(q);
}
for(i=0;i<m;i++){
if(s.find(a[i][0])==s.end()&&s.find(a[i][1])==s.end()){
ok=1;
break;
}
}
if(ok==1){
cout<<"NO"<<endl;
}else if(ok==0){
cout<<"YES"<<endl;
}
}
}
浙公网安备 33010602011771号