Atcoder刷题

现在在刷b,c题, 用于记录
bc 题目标是要刷到5-10分钟 一题
190-B 输出注意大小写. 回车需要注意吗?
189-B 百分比的题目比较的数可以直接乘以100, 注意看值范围 longlong 还是好用的
188-B 使用了一些奇怪的加快写代码速度的方式
187-B 算术的时候需要注意,特别是除法判定的时候是,整数除法是没有小数点的, 所以要用double
186-b 需要修改一下模板
190-c 这题题目要读清楚, 给的k个数据里面是 二选一的, 主要思想还是暴力, 遍历所有情况这里假如k是三 二选一的话可以有8种情况, 只是这里用到了一个技巧就是位掩码, bitmask,这应该属于在特定的场景下,可以用的方法了吧, 唬住我好久(拖了一下午),因为一些01的细节又卡了一会. 现在问题来了,不用这个,用纯暴力遍历,我感觉好像时间上好像没有区别?
189c 惊了这题居然直接暴力就过了,没用算法…
188c用的递归,发现自己写的程序慢的原因是, 递归返回条件应该是写在靠前的地方, ?而且还简洁, 大道至简
187c 学到了, 用set 可以自行字符串匹配,而且比我的O(n^2)快,但是它是用了什么算法呢? 程序设计竞赛应该是要知道是什么算法的吧
186c 学习了sprintf 对字符的处理,可以处理成d 或 o,学了string::npos,字符串处理会一些

#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e5+7;
int a[MAX];
int n;
int main(void){
	FAST;
	cin >> n;
	int cnt = 0;
	char buf[11];
	int ans = 0;
	for(int i=1; i<=n; i++){
		sprintf(buf, "%d", i);
		string s = string(buf);
		if(string::npos!= s.find('7')){
            ans ++;
		} else {
            sprintf(buf, "%o",i);
            s = string(buf);
            if(string::npos!= s.find('7')){
                ans ++;
            }
		}
	}
	cout << (n-ans);
}

187c
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e5+7;
set<string> s;

	int n;
	int sat=0;
int main(void){
	FAST;
	cin >> n;
	For(i,1,n){
	    string tmp;
	    string judge;
		cin >> tmp;
		int flag = (tmp[0]=='!'?  1:0);
		if(flag){
            judge = tmp;
            judge.erase(judge.begin());
            if(s.count(judge)){
                cout << judge << endl;
                sat = 1;
                break;
            }
		} else {
            judge = '!' + tmp;
            if(s.count(judge)){
                cout << tmp << endl;
                sat = 1;
                break;
            }

		}
		s.insert(tmp);
	}

	if(sat == 0){
        cout << "satisfiable";
	}
}
188c
better code
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e6+7;

int n;
int a[MAX];
int findBigi(int start, int end){
    if(end - start == 1){
        return a[end] > a[start]? end : start;
    }
	int ret;
	int mid = (end+start)/2;
	int l = findBigi(start,mid);
	int r = findBigi(mid+1,end);
	if(start==1 && end == n){
        cout<< (a[l] < a[r]? l:r);
		return 0;
	} else {
			return a[l] > a[r]? l:r;
	}
}
int main(void){
	FAST;
	cin >> n;
	n=1<<n;
	For(i,1,n){
		cin >> a[i];
	}
	if(n==2){
        cout<<(a[1]>a[2]? 2:1);
	}
	findBigi(1,n);
}

mycode
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e6+7;

int n;
int a[MAX];
int findBigi(int start, int end){
	if(end - start == 1){
		return a[end] > a[start]? end : start;
	}
	int ret;
	int mid = (end+start)/2;
	int l = findBigi(start,mid);
	int r = findBigi(mid+1,end);
	if(start==1 && end == n){
		return a[l] < a[r]? l:r;
	} else {
		return a[l] > a[r]? l:r;
	}
}
void findSec(){
	int ans;
	if(n==2){
        cout<<(a[1]>a[2]? 2:1);
        return;
	}
	int l = findBigi(1,n/2), r = findBigi(n/2+1,n);
	if(a[l] < a[r]) ans =  l;
	else ans = r;
	cout << ans;
}
int main(void){
	FAST;
	cin >> n;
	n=1<<n;
	For(i,1,n){
		cin >> a[i];
	}
	findSec();
}

189c
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e4+7;
int n;
int A[MAX];
int Min[MAX][MAX];
int main(void){
	cin >> n;
	For(i,1,n){
		cin >> A[i];
		Min[i][i] = A[i];
	}
	int max = 0;
	For(i,1,n){
		int tmp= N;
		for(int j=i; j<n+1; j++){
			if(tmp>A[j]) tmp = A[j];
			Min[i][j] = tmp;
			if(max < (j-i+1)*Min[i][j]) max = (j-i+1)*Min[i][j];
		}
	}
	cout << max;
}

190- C - Bowls and Dishes

#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define debug(a) cout << #a << ": " << a << endl
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5+10;
const int MAX = 1e3+7;
int n,m,k;
vector<vector<int>> vis(MAX, vector<int>(MAX));
vector<int> dish(MAX);
vector<int> a(MAX),b(MAX);
int main(void){
	FAST;
	cin >> n >> m;
	//表示一个有两个状态的数据有很多方法二维数组,两个数组,pair等 
	// pair c++17有auto&[x,y]的奇怪语法 
	vector<int> a(MAX),b(MAX);
	For(i,1,m){ 
		cin >> a[i]>> b[i];
	}
	cin >> k;
	vector<int> c(MAX),d(MAX);
	for(int i=1; i<=k; i++){
		cin >> c[i] >> d[i];
	}
	vector<int> choices(MAX);
	int ans=0;
	for(int bitmasks = 0; bitmasks < (1 << k); bitmasks++){
		for(int j=1; j<=n; j++){
			choices[j]=0;
		}
		for(int j=1; j<=k; j++){
			if((1<<(j-1))&bitmasks) choices[c[j]]++;
			else choices[d[j]]++;
		}
		int ret=0;
		for(int j=1; j<=m; j++){
			if(choices[a[j]]&&choices[b[j]]){
				ret++;
			}
		}
		ans = ans > ret? ans : ret;
	}
	cout << ans;
}
186-b
#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
#define ll long long
#define forn0 for(int i=0; i<n; i++)
#define forn1 for(int i=1; i<=n; i++)
const int MAX = 1111;
using namespace std;
int n;
int a[MAX][MAX];
int main(void){
	FAST;
	int h,w ;
	cin >> h >>w ;
	int min=MAX;
	for(int i=1; i<=h; i++){
		for(int j=1; j<=w; j++){
			cin >> a[i][j];
			if(min > a[i][i]) min = a[i][j];
		}
	}
	int sum =0;
	for(int i=1; i<=h; i++){
		for(int j=1; j<=w; j++){
			sum += (a[i][j]-min);
		}
	}
	cout << sum;
}
187-b
#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
#define ll longlong
#define forn0 for(int i=0; i<n; i++)
#define forn1 for(int i=1; i<=n; i++)
const int MAX = 111111;
using namespace std;
int n;
double x[MAX],y[MAX];

int main(void){
	cin >> n;
	forn1{
		cin >> x[i] >> y[i];
	}
	int sum =0;
	for(int i=1; i<n; i++){
		for(int j=i+1; j<=n; j++){
			if(abs((y[j]-y[i])/(x[j]-x[i]))<=1) sum++;
		}	
	}
	cout << sum;
}
188-B
#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
#define ll longlong
#define forn0 for(int i=0; i<n; i++)
#define forn1 for(int i=1; i<=n; i++)
const int MAX = 111111;
using namespace std;
int a[MAX];
int b[MAX];
int n;
int main(void){
	FAST;
	cin >> n;
	forn0{
		cin >> a[i]; 
	}
	int sum = 0;
	forn0{
		cin >> b[i];
		sum +=a[i]*b[i];
	}
	if(sum==0) cout << "Yes";
	else cout << "No";
} 
189-B
#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;

long long  n,x,v,p;
void solve(){
	long long sum = 0; 
	for(int i=1; i<=n; i++){
		cin >> v >> p;
		if((sum+= v*p) > x) {
			cout << i;
			return ;
		}
	}
	cout << "-1";
	return ;
}
int main(void){
	FAST;
	cin >> n >> x;
	x*=100;
	solve();
}
190-B
#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
int n,s,d;

void solve(){
	int flag = 0;
	for(int i=0; i<n; i++){
		int x,y;
		cin >> x >> y;
		if(x>=s || y<=d);
		else flag = 1;
	}
	if(flag) cout << "Yes" ;
	else cout << "No";
	
}
int main(void){
	FAST;
	cin >> n >> s >> d;
	solve();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值