Codeforces Round 928 (Div. 4)
A. Vlad and the Best of Five
思路
就是统计字符A和字符B的个数,将个数多的那个输出出来
Code
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
#define int long long
void solve(){
string s;
cin>>s;
int ans1=0,ans2=0;
for(int i=0;i<s.size();i++){
if(s[i]=='A'){
ans1++;
}
else{
ans2++;
}
}
cout<<(ans1>ans2?'A':'B');
cout<<'\n';
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int T = 1;
std::cin >> T;
while (T--) solve();
return 0;
}
B. Vlad and Shapes
思路
就是判断数字1组成的是正方形还是三角形,由于他要求组成的三角形的的特殊性,这里我是比较了一下围成的图形的底和高,如果相等就是正方形,如果不等那就是三角形,但是如果不限制形状是不可以这样做的
Code
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
#define int long long
void solve(){
int n; cin>>n;
std::vector<string> a(n);
for(int i=0;i<n;i++) cin>>a[i];
int hmin=100,hmax=-1;
int dmin=100,dmax=-1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]=='1'){
hmin=min(hmin,i);
hmax=max(hmax,i);
dmin=min(dmin,j);
dmax=max(dmax,j);
}
}
}
if((dmax-dmin)==(hmax-hmin)){
cout<<"SQUARE"<<endl;
}
else{
cout<<"TRIANGLE"<<endl;
return ;
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int T = 1;
std::cin >> T;
while (T--) solve();
return 0;
}
C. Vlad and a Sum of Sum of Digits
思路:
这个题就是预处理一下数字,因为本题的限制是0.5s,所以我们不能每次都去找数字,只能一次性做好,再用O(1)的时间去查询,但是我一开始预处理时候用的字符串方式也超时了,这里我把字符串代码也粘贴出来,希望大家给出意见
Code
//TLE
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
const int N=2e5+10;
int a[N];
#define int long long
void init(){
int l=1;
for(int i=1;i<=N;i++){
a[i]=a[i-1];
string s=to_string(l);
for(int j=0;j<s.size();j++){
a[i]+=(s[j]-'0');
}
l++;
}
}
void solve(){
int n;
cin>>n;
cout<<a[n]<<endl;
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
init();
int T = 1;
std::cin >> T;
while (T--) solve();
return 0;
}
//AC
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
const int N=2e5+10;
int a[N];
#define int long long
void init(){
for(int i = 1; i <= 200000; i ++){
int x = i;
while(x){
a[i] += x % 10;
x /= 10;
}
}
for(int i = 1; i <= 200000; i ++){
a[i] += a[i - 1];
}
}
void solve(){
int n;
cin>>n;
cout<<a[n]<<endl;
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
init();
int T = 1;
std::cin >> T;
while (T--) solve();
return 0;
}
E. Vlad and an Odd Ordering
思路
因为每次都是执行完当前的(n+1)/2张牌,并且都是数字都是有一定规律的,所以可以模拟一下就行
Code
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
#define int long long
void solve(){
int n,k; cin>>n>>k;
int ans=0;
int x=1;
int now=(n+1)/2;
while(now<k){
k-=now;
n/=2;
x*=2;
now=(n+1)/2;
}
// int val=2*k-1;
ans=x*(2*k-1);
cout<<ans<<endl;
/**/
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int T = 1;
std::cin >> T;
while (T--) solve();
return 0;
}
标签:std,int,Codeforces,long,928,while,solve,Div,define
From: https://www.cnblogs.com/du463/p/18023970