题目链接
A、Equalize Prices Again
水题,找平均数就行。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2e5+10;
ll a[N],b[N],pd[N];
int main()
{
int t,n;
cin >> t;
while(t--)
{
cin >> n;
ll sum = 0;
for(int i=0;i<n;i++){
cin >> a[i];
sum+=a[i];
}
if(sum%n==0)
cout << sum/n <<endl;
else
cout << sum/n+1 <<endl;
}
return 0;
}
B2(B1)、Social Network
题意:一共有n条信息,屏幕上只能显示k个好友的信息,如果该好友的信息已经在屏幕上则不发生任何变化,否则将最早的一条好友信息顶掉,新的好友信息进入屏幕。
思路:就是维护一下k这个个范围,模拟一下队列就可以,如果大于k条信息,那么就把最先的弹出队列。
想了半天的题…一开始没看懂题意…好不容易写出来
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2e5+10;
ll a[N],b[N];
map<ll,int>pd;
int main()
{
int t,n,k,l=0,r=0;
//cin >> t;while(t--){}
cin >> n >> k;
ll x;
for(int i=0; i<n; i++)
{
cin >> x;
if(!pd[x]){
pd[x] = 1;
a[r++] = x;
if(r-l>k)
pd[a[l++]] = 0;
}
}
cout << r-l <<endl;
for(int i=r-1;i>=l;i--)
cout << a[i] << " ";
cout <<endl;
return 0;
}
C、Pipes
题意:有六种管道,每种管道都可以旋转90°,可以旋转无限次,有两排管道,从第一排第一个开始,问能否联通到第二排最后一个。
思路:因为管道能够旋转,所以分的话管道只有两种,一种直的,一种拐弯的。然后模拟路径然后判断即可,判断是前一个接口是水平的还是竖直的。如果前一个是水平的,遇见水平的还是水平,遇见拐弯的第一排就向下,第二排就向上;如果前一个是拐弯的,遇见水平的那么必然不可能链接成功,如果遇见拐弯的,那么方向变成水平。最后判断一下管道位置即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2e5+10;
int a[5][N],b[N],pd[N];
char pipes[5][N];
int main()
{
int t,n;
cin >> t;
while(t--)
{
cin >> n;
for(int i=0;i<2;i++)
for(int j=0;j<n;j++)
{
cin >> pipes[i][j];
if(pipes[i][j]=='1' || pipes[i][j]=='2')
a[i][j] = 0;
else a[i][j] = 1;
}
int row=0,col =0;
int state = 0,endd=0;
bool flag = 0;
while(col<n)
{
if(state==0){
if(a[row][col] == 0)
col++;
else{
state = 1;
row = !row;
}
}else{
if(a[row][col] == 0)
{
flag = 1;
break;
}
else{
col++;
state = 0;
}
}
}
if(flag||row==0)
cout << "NO" <<endl;
else
cout << "YES" <<endl;
}
return 0;
}