首页 > 其他分享 >Codeforces Round 964 (Div. 4)

Codeforces Round 964 (Div. 4)

时间:2024-08-08 15:27:30浏览次数:12  
标签:964 10 进制 int Codeforces long solve Div define

知识点

1.对于两个数字,一个乘n,一个除以n,可以理解为n进制下的这个数乘10和除10。比如E题用这个知识点就可以很快的解决问题。

题解

A. A+B Again?

#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	string s;
	cin>>s;
	cout<<s[0]-'0'+s[1]-'0';
	cout<<endl;
	
}

signed main()
{
	int t=1; cin>>t;
	while(t--) solve();
}

B - Card Game
1.枚举四种情况,赢的话+1,输出赢的总数即可,不要自己手推情况,会有错


#include <bits/stdc++.h>
#define int long long
using namespace std;


//-----变量----------------------

//------------------------------------------
int f(int a,int b)
{
    if(a>b) return 1;
    if(a==b) return 0;
    if(a<b) return -1;
}

void solve()
{
    int a1,a2,b1,b2;
    cin>>a1>>a2>>b1>>b2;
    int ans1=0;
    
    if(f(a1,b1)+f(a2,b2)>0) ans1+=1;
    if(f(a1,b2)+f(a2,b1)>0) ans1+=1;
    if(f(a2,b2)+f(a1,b1)>0) ans1+=1;
    if(f(a2,b1)+f(a1,b2)>0) ans1+=1;
    
    cout<<ans1<<endl;
    
}




signed main()
{
     std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    int t=1; 
    cin>>t;
    
    while(t--)
    {
        solve();
    }
    

}


C. Showering
1.由于给的时间段还是从小到大排的,那么只要计算这些时间段之间的时间差值,还有0到第一个时间段的时间,还有最后一个时间段的结束时间到给定m的时间差值,取最大即可

#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	int n,s,m;
	cin>>n>>s>>m;
	int maxx=-1;
	int l,r;
	int last=0;
	for(int i=0;i<n;i++)
	{
		cin>>l>>r;
		maxx=max(l-last,maxx);
		last=r;
	}
	maxx=max(maxx,m-last);
	if(maxx>=s) {
		cout<<"YES";
	}else cout<<"NO";
	cout<<endl;
}

signed main()
{
	int t=1; cin>>t;
	while(t--) solve();
}

D. Slavic's Exam
1.遍历第一个字符串,遇到匹配的第二个字符串时,就把指针++,看这个指针能不能遍历完第二个字符串,遍历完检查是否还有?,如果有把?全部输出a即可,无法遍历完就是不满足题意

#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
	string a,b;cin>>a>>b;
	int p=0;
	for(int i=0;i<a.size();i++)
	{
		if(a[i]==b[p]||a[i]=='?'){
			a[i]=b[p];
			p++;
		
		}
		if(p==b.size()) {
			cout<<"YES"<<endl;
			break;
		}
	}
	if(p!=b.size()){
		cout<<"NO"<<endl;
		return; 
	}
	
	for(int i=0;i<a.size();i++){
		if(a[i]=='?') cout<<'a';
		else cout<<a[i];
	}
	cout<<endl;
}

signed main()
{
	int t=1; cin>>t;
	while(t--) solve();
}

E. Triple Operations
1.首先对于 \(3x\) 和\(⌊\frac{3}{y}⌋\),如果在三进制的情况下乘以3,相当于对三进制位下的数字乘以10,除以3相当于除以10,那么同时进行这两个操作时数字的三进制位下的总数是不会变的。举个例子三进制下 \(8\) 为 \(22\) ,\(11\)为\(102\),如果对8乘3,24在三进制位下为\(220\),对11除以3,3在二进制下为\(10\),那么两个数字的总位数还是5,没有变化。

2.然后当我们得到一个0以后,对于其他的数字的操作就是让它们的三进制位一直去除以10即可,这样便可以慢慢的让这些数字都转变为0。

3.那么从最小的数去得到0,对结果的贡献就是这个数的三进制位数,然后变成0时,其他的数字和当前这个数字的三进制位的总和还是不变的。答案就是,l的三进制位数+所有数字的三进制位数,那么使用前缀和,便可以快速的得到答案。

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
int dx[]={0,1,0,-1,0,0};
int dy[]={1,0,-1,0,0,0};
int dz[]={0,0,0,0,1,-1};

//-----变量----------------------
int pre[200010];//当前位置下总共的三进制位数
int a[200010];//每个数的三进制位数
//------------------------------------------

int get(int x)
{
    int cnt=0;
    while(x)
    {
        x/=3;
        cnt++;
    }
    return cnt;
}


void solve()
{
    int l,r;
    cin>>l>>r;
    cout<<pre[r]-pre[l-1]+a[l]<<endl;
    
}




signed main()
{
     std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    for(int i=1;i<200010;i++)
    {
        a[i]=get(i);
        pre[i]=pre[i-1]+a[i];
    }
    
    
    int t=1; 
    cin>>t;
    
    while(t--)
    {
        solve();
    }
    

}


标签:964,10,进制,int,Codeforces,long,solve,Div,define
From: https://www.cnblogs.com/swjswjswj/p/18349031

相关文章

  • Codeforces Round 964 (Div. 4)
    CodeforcesRound964(Div.4)A送分B大意:两个人两张牌随机翻求a翻出来的牌比b大的可能#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstring>#include<vector>#defineepemplace_backusingnamespace......
  • Codeforces Round 964 (Div. 4) D. Slavic's Exam
    题目链接:https://codeforces.com/contest/1999/problem/D题目描述Slavic的考试非常难,需要您的帮助才能通过。以下是他正在努力解决的问题:存在一个字符串s,它由小写英文字母和可能零个或多个“?”组成。Slavic被要求将每个“?”更改为小写英文字母,使得字符串t成为字符串s的......
  • Codeforces Round 962 (Div. 3)
    A.Legs-------------------------------------题解------------------------------经典鸡兔同笼,数据范围不大,跑暴力就行点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;cin>>t;while(t--){intn;cin>......
  • 题解:Codeforces Round 964 (Div. 4) D
    D.Slavic'sExamtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputSlavichasaverytoughexamandneedsyourhelpinordertopassit.Hereisthequestionheisstrugglingwith:Ther......
  • 题解:Codeforces Round 964 (Div. 4) C
    C.Showeringtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputAsacomputersciencestudent,Alexfacesahardchallenge —showering.Hetriestoshowerdaily,butdespitehisbestefforts......
  • Codeforces Round 964 (Div. 4)
    比赛链接:CodeforcesRound964(Div.4)A思路    水题代码#include<iostream>usingnamespacestd;#definelllonglonginlineintread(void){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){......
  • 题解:Codeforces Round 964 (Div. 4) A
    A.A+BAgain?timelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputGivenatwo-digitpositiveinteger\(n\),findthesumofitsdigits.InputThefirstlinecontainsaninteger\(t\)(\(1......
  • Codeforces Round 964 (Div. 4) 补题记录(A~G2)
    难绷事实:Bwa一发A......#include<bits/stdc++.h>#definepbpush_back#defineintlonglongusingnamespacestd;constintN=500100;inta[N];signedmain(){intT;cin>>T;while(T--){intn;cin>>n;strings=......
  • Codeforces Round 964 (Div. 4)
    CodeforcesRound964(Div.4)A计算数位和。voidsolve(){ inta=0,n; cin>>n; while(n)a+=n%10,n/=10; cout<<a<<'\n';}B模拟,直接枚举4种出牌顺序,按题目给的规则判断即可。boolchk(intx1,inty1,intx2,inty2){ intc1=(x1&g......
  • Codeforces Round 963 (Div. 2)
    第一次上蓝名,指不准哪天掉下来就可以第二次蓝名了,好耶B.ParityandSum(CF1993B)首先特判原数组奇偶性相同的情况,奇偶不同时,由于替换过程只能产生奇数,故目标是将所有偶数变成奇数。假设当前选中奇数\(a_i\)和偶数\(a_j\),若\(a_i<a_j\),第一次操作时\(a_i:=a_j+a_i\),故最多......