2020第一赛(新生赛002)补题

2020第一赛(新生赛002)补题

这次只出了一道题 不可能告诉你们呢道题是签到题
然后是愉快的补题时间(如下)

J - 新年快乐(传说中的签到题

NBUT - 1609

题干传送门

题意

是在一个坐标轴上求一个梯形的面积 可以把这个梯形分成两个同底不同高的两个三角形附代码

思路+代码

#include 
#include 
int main(){
 double x,y,z,t;
 while(scanf("%lf %lf %lf %lf",&x,&y,&z,&t)!=EOF){
  printf("%.1lf\n",0.5*fabs(x-z)*(fabs(y)+fabs(t)));
 }
 return 0;
} 

I - 十进制中的二进制

NBUT - 1666

题干传送门

开始的思路

一位数字的时候只有一个类二进制数(也就是1),两位数字的时候有两个类二进制数(10和11),然后用%10/10算出n有几位数前n-1位数字可以用等比数列前n项和来算 只需算出n位数字有有几个类二进制数加起来即可,算出数字n 所有位的数有几个超过1的数字附源代码如下(未AC)

#include 
#include 
#include 
using namespace std;
int qpow(int x,int y){
 int i,re=1;
 for(i=1;i<=y;i++){
  re*=x;
 }
 return re;
}
int main(){
 int i,n,sum;
 while(cin>>n != EOF){
  i=0;
  sum=0;
  for(;n>0;n/=10,i++){
   if(n%10>=1)
    sum++;
  
  printf("%d\n",-1+qpow(2,i-1)+qpow(2,sum-1));
 }
 return 0;
}

然后补题失败 看过大佬题解之后不知道dfs是啥
去学了下(还不太懂)
等看懂再补上吧hhhhhh

H - Perfect String

CodeForces - 1265A

题干传送门

题意

思路+代码

B(Is it beautiful?)

CodeForces-1265B

题干

题干传送门

题意

给一个含有n个整形元素的数组,对每一个m(1<=m<=n)进行判断是否有一个含m个元素的区间([l,r])能够包含从1到m的所有元素(不要求顺序排列)并以0和1输出

思路+代码

一 孙晨曦dalao思路+代码
思路

因为如果存在这样的区间[l,l+1,…,r]使区间内恰好
只有前k个数,则区间长度为r-l+1,所以可以在输入时
预处理排列中[1…n]每个数的位置,对数值进行排序。
开两个变量记录包含当前值k(并包含之前值)需要的
最大左右端点l和r,判断r-l+1是否等于k即可。
``

代码
#include
#include
#include
using namespace std;
const int maxn=200007;
int t,n,p[maxn];
 
int main(){
 cin>>t;
 int l,r;
 while(t--){
  scanf("%d",&n);
  l=maxn;r=0;
  int x;
  for(int i=1;i<=n;i++){
   scanf("%d",&x);
   p[x]=i;//用一个桶把数字的位置标记出来
  }
  for(int i=1;i<=n;i++){
   l=min(l,p[i]);//得到从1到i这i个数中最靠左的数的下标
   r=max(r,p[i]);//同理得到最靠右的数的下标
   if(r-l+1==i)printf("1");//略有删改
   else printf("0");
  }
  printf("\n");
 }
}

二 自己的还没想出来 等想出来比dalao的更简单的话会再加上

D-Eat Candies(补题)

CodeForces - 1263A

题干传送门

题意

给你三种颜色的糖块的数量,每天吃两个不同颜色的糖块 得出这三堆糖块最多能吃几天

思路+代码

cbl思路
思路

用最少的那堆糖去平和其他两堆 分两种情况 1 最多的减去第二多的比最少的那堆多 (也就是平和不了 最少的那堆太少了)简单,2最少的那堆比两堆差还多 再分两种情况 剩的是奇数余数减一除二 同理

代码
#include 
#include 
#include 
using namespace std;
int t,r,g,b;
int main(){
 cin>>t;
 while(t--){
  cin>>r>>g>>b;
  if(r>g){
   int temp=r;r=g;g=temp;
  }
  if(r>b){
   int temp=r;r=b;b=temp;
  }
  if(g>b){
   int temp=g;g=b;b=temp;
  }
  if(b-g>=r){
   cout<

E - 由你决定怎么颁奖

CodeForces - 1264A

题干传送门

题意

在攽发最多的奖牌的情况下(g+s+b),满足以下条件
1.g>0&&s>0&&b>0
2.g 3p[g]>p[s]>p[b]>p[wu]不能相等
4.g+s+b<=n/2
5。g+s+b的总数要最多

思路+代码

思路

1.先把g安排好(越少越好)
2.同理,再把s安排好(也是越少越好)
3.最后,把能安排的剩下的所有奖牌都给b

代码
#include 
#include 
#include 
using namespace std;
int t,n;
const int maxn=400005;
int p[maxn];
int main(){
 cin>>t;
 while(t--){
  int i=1,t,x=1,y=2,z=2;
  cin>>n;
  for(int h=1;h<=n;h++)
   cin>>p[h];
  t=p[1];
  for(i++;x+y+z<=n/2&&p[i]==t;i++)x++,y++,z++;
  i=x+y;
  t=p[i];
  for(i++;x+y+z<=n/2&&p[i]==t;i++)y++;
  i=x+y+z;
  z=n/2-x-y;
  t=p[n/2+1];
  for(int h=n/2;x+y+z<=n/2&&p[h]==t;h--)z--;
  if(x

F - XorXor

NBUT - 1615

题干传送门

题意

思路+代码

A - 构造最长递增字串

NBUT - 1667

题干传送门

题意

思路+代码

C - Juicer

POJ -2227

题干传送门

题意

思路+代码

你可能感兴趣的:(2020第一赛(新生赛002)补题)