KYOCERA Programming Contest 2022(AtCoder Beginner Contest 271)
A - 484558
思路:进制转换
没啥巧解,就十进制转十六进制
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define SZ(v) ((int)v.size())
#define fs first
#define sc second
const int N=2e6+10,M=2e5;
typedef double db;
typedef pair<int,int>pii;
int n,m,k,Q,cnt,t;
vector<int>del;
int l[200010],l1[N],r[200010],r1[N];
int prime[N];
bool st[N];
bool isPrime(int n)
{
if (n <= 3)//当n不大于3时只有1不是素数
return n > 1;
if (n % 6 != 1 && n % 6 != 5)//只有6i+1和6i+5可能是素数
return false;
for (int i = 5; i <= sqrt(n); i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
map<int,char>mp;
void solve() {
int n;cin>>n;
int sum=0;
int x=n/16;
n%=16;
for(int i=0;i<16;i++){
if(i<=9)mp[i]=char(i+'0');
else {
mp[i]=(char)(i-10+'A');
}
}
cout<<mp[x]<<mp[n];
}
signed main(){
//cin>>t;
t=1;
while(t--)solve();
}
B - Maintain Multiple Sequences
思路:
直接取出对应位置的值即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define SZ(v) ((int)v.size())
#define fs first
#define sc second
const int N=2e5+10,M=2e5;
typedef double db;
typedef pair<int,int>pii;
int n,m,k,Q,cnt,t;
vector<int>del;
int l[200010],l1[N],r[200010],r1[N];
int prime[N];
bool st[N];
bool isPrime(int n)
{
if (n <= 3)//当n不大于3时只有1不是素数
return n > 1;
if (n % 6 != 1 && n % 6 != 5)//只有6i+1和6i+5可能是素数
return false;
for (int i = 5; i <= sqrt(n); i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
map<int,char>mp;
void solve() {
int n,m;
cin>>n>>m;
vector<int>g[N];
for(int i=1;i<=n;i++){
int x;
cin>>x;
for(int j=1;j<=x;j++){
int y;
cin>>y;
g[i].push_back(y);
}
}
while(m--){
int i,j;
cin>>i>>j;
j--;
cout<<g[i][j]<<endl;
}
}
signed main(){
//cin>>t;
t=1;
while(t--)solve();
}
C - Manga
思路:二分
二分答案然后看 mid 是不是满足能构成 1到 mid里面的所有数,能就继续二分,输出答案即可文章来源:https://www.toymoban.com/news/detail-697930.html
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define SZ(v) ((int)v.size())
#define fs first
#define sc second
const int N=2e5+10,M=2e5;
typedef double db;
typedef pair<int,int>pii;
int n,m,k,Q,cnt,t;
vector<int>del;
int l[200010],l1[N],r[200010],r1[N],b[N];
int prime[N];
bool st[N];
bool isPrime(int n)
{
if (n <= 3)//当n不大于3时只有1不是素数
return n > 1;
if (n % 6 != 1 && n % 6 != 5)//只有6i+1和6i+5可能是素数
return false;
for (int i = 5; i <= sqrt(n); i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
unordered_map<int,int>mp;
int f[110][10100];
pii lst[110][10100];
void dfs(int i,int j){
if(i==0) return ;
dfs(i-1,j-lst[i][j].first);
if(lst[i][j].second==1) cout<<"H";
else cout<<"T";
}
priority_queue<int>q;
bool check(int mid){
int x=0,y=0;
rep(i,1,mid){
if(!mp[i])x++;
}
if(n-(mid-x)>=x*2)return true;
else return false;
//1 3 5 7 8 9
}
//int n;
void solve() {
cin>>n;
vector<int>a(n);
for(auto&i:a) {
cin>>i;
mp[i]++;
}
sort(a.begin(),a.end());
int l=0,r=n;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)){
l=mid;
//cout<<"l== "<<l<<endl;
}
else {
r=mid-1;
//cout<<"r=== "<<r<<endl;
}
}
cout<<l;
}
signed main(){
//cin>>t;
t=1;
while(t--)solve();
}
D - Flip and Adjust
思路:动态规划
类似于背包,然后就是判断他前面一个数能不能转换过来能就记录该值以及路径即可,然后dfs反向判断满足条件的路径文章来源地址https://www.toymoban.com/news/detail-697930.html
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define SZ(v) ((int)v.size())
#define fs first
#define sc second
const int N=2e5+10,M=2e5;
typedef double db;
typedef pair<int,int>pii;
int n,m,k,Q,cnt,t;
vector<int>del;
int l[200010],l1[N],r[200010],r1[N],a[N],b[N];
int prime[N];
bool st[N];
bool isPrime(int n)
{
if (n <= 3)//当n不大于3时只有1不是素数
return n > 1;
if (n % 6 != 1 && n % 6 != 5)//只有6i+1和6i+5可能是素数
return false;
for (int i = 5; i <= sqrt(n); i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
map<int,int>mp;
int f[110][10100];
pii lst[110][10100];
void dfs(int i,int j){
if(i==0) return ;
dfs(i-1,j-lst[i][j].first);
if(lst[i][j].second==1) cout<<"H";
else cout<<"T";
}
priority_queue<int>q;
void solve() {
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
}
f[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
if(j>=a[i]){
if(f[i-1][j-a[i]]){f[i][j]=1;lst[i][j]={a[i],1};}
}
if(j>=b[i]){
if(f[i-1][j-b[i]]){f[i][j]=1;lst[i][j]={b[i],2};}
}
}
}
if(f[n][m]){
cout<<"Yes\n";
}
else {
cout<<"No";
return ;
}
dfs(n,m);
}
signed main(){
//cin>>t;
t=1;
while(t--)solve();
}
到了这里,关于KYOCERA Programming Contest 2022(AtCoder Beginner Contest 271)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!