首页 > 其他 > 详细

2019山东省赛补题

时间:2020-10-02 00:05:55      阅读:32      评论:0      收藏:0      [点我收藏+]

A题

题解:A题注意看清题目每月三十天每周五天很关键,因为每月星期几是固定的。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll nl=1e5+5;
ll a[nl]={0};
ll b[nl]={0};
ll c[nl]={0};
int main(){
ll t;
cin>>t;
while(t--){
ll y1,m1,d1;
cin>>y1>>m1>>d1;
string s;
cin>>s;
ll z,z1;
if(s=="Monday"){
z=1;
}else if(s=="Tuesday"){
z=2;
}else if(s=="Wednesday"){
z=3;
}else if(s=="Thursday"){
z=4;
}else{
z=5;
}
ll y2,m2,d2;
cin>>y2>>m2>>d2;
if(d1>d2){
d1-=d2;
d1%=5;
if(z>d1){
z-=d1;

}else{
z+=5;
z-=d1;
}
}else{
d2-=d1;
d2%=5;
if(z+d2<=5){
z+=d2;

}else{
z=z+d2-5;
}
}
if(z==1){
cout<<"Monday"<<endl;
}else if(z==2){
cout<<"Tuesday"<<endl;
}else if(z==3){
cout<<"Wednesday"<<endl;
}else if(z==4){
cout<<"Thursday"<<endl;
}else{
cout<<"Friday"<<endl;
}
}
}

C题

题解:注意第一次便有可能到达最大距离。所以计算出最后一步最远距离后还要一第一次相比较。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll t;
cin>>t;
while(t--)
{

ll n,k;
cin>>n>>k;
string s;
cin>>s;
ll x=0,y=0;
ll xn=0;
for(ll i=0; i<n; i++)
{
if(s[i]==‘U‘)
y++;
if(s[i]==‘D‘)
y--;
if(s[i]==‘L‘)
x--;
if(s[i]==‘R‘)
x++;

if(xn<fabs(x)+fabs(y))
{
xn=fabs(x)+fabs(y);
}
}

ll sumx=(k-1)*x;
ll sumy=(k-1)*y;
ll maxx=0;
for(ll i=0; i<n; i++)
{
if(s[i]==‘U‘)
sumy++;
if(s[i]==‘D‘)
sumy--;
if(s[i]==‘L‘)
sumx--;
if(s[i]==‘R‘)
sumx++;
if(maxx<fabs(sumx)+fabs(sumy))
{
maxx=fabs(sumx)+fabs(sumy);
}
}
cout<<max(xn,maxx)<<endl;
}
}

D题

d题很简单,当时被过题数迷惑了。就看第n-1条边是谁删的即可。另外注意队伍是循环进行的,不是一次走完的。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll nl=1e5+5;
ll a[nl]={0};
ll b[nl]={0};
ll c[nl]={0};
int main(){
ll t;
cin>>t;
while(t--){
ll k;
cin>>k;
ll i;
string ml;
cin>>ml;
ll n,m;
cin>>n;
cin>>m;
for(i=0;i<m;i++){
cin>>b[i];
cin>>c[i];
}
ll num;
num=m-(n-1);
num%=k;
for(i=0;i<k;i++){
if(i==num){
if(ml[i]==‘2‘){
cout<<"1"<<endl;
}else{
cout<<"2"<<endl;
}
break;
}
}

}
}

M题认识到2的30次方大于1E9即可。即当k大于30的时候答案都是1,还要注意n=0的情况特判。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll t;
cin>>t;
while(t--){
ll n,k;
cin>>n;
cin>>k;
ll i;
if(n==0){
cout<<"0"<<endl;
}else{
if(k<30){
for(i=0;i<k;i++){
if(n%2==0){
n/=2;
}else{
n+=1;
n/=2;
}
}
cout<<n<<endl;
}else{
cout<<"1"<<endl;
}
}
}
}

 

2019山东省赛补题

原文:https://www.cnblogs.com/yyscn/p/13758750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!