首页 > 编程语言 >第四届辽宁省大学生程序设计竞赛

第四届辽宁省大学生程序设计竞赛

时间:2024-05-14 17:51:49浏览次数:23  
标签:辽宁省 return int sum vector 第四届 using 程序设计 qury

A - 欢迎来到辽宁省赛

#include <bits/stdc++.h>

using namespace std;


int main(){
	cout << "27\n";
	return 0;
}

B - 胜率

首先如果参加了 10000 局比赛,则一定会有当前胜率的情况出现。

所以我们枚举一下分母就好了

#include <bits/stdc++.h>

using namespace std;

int main(){
	double A;
	cin >> A, A /= 100.0;
	for(int x , y = 1; y <= 100000; y ++) {
		x = A * y;
		for(int i = max(x - 10 , 0) , v; i <= min(x + 10 , y); i ++){
			v = (double(i) / double(y) * 1e5 + 5) / 10;
			//v /= 1000;
			if(abs(A * 100 - double(v) / 100) == 0) {
				cout << y << "\n";
				return 0;
			}
		}
	}
	return 0;
}

C - 连环爆炸

先删掉所有无法被炸死的怪,然后贪心的删除爆炸伤害高的。

#include <bits/stdc++.h>

using namespace std;

using pii = pair<int,int>;

bool cmp(const pii &x , const pii &y) {
	if(x.second != y.second) return x.second < y.second;
	return x.first < y.first;
}

int main() {
	int n, res = 0, sum = 0;
	cin >> n;
	vector<pii> f(n);
	for(auto &[a,b] : f) cin >> a >> b , sum += b;

	{ // 删掉无法被炸死的
		vector<pii> g;
		queue<int> q;
		q.push(0);
		for(auto it : f){
			if( it.first > sum - it.second) res ++, q.back() += it.second;
			else g.push_back(it);
		}
		f = move(g);
		while(not q.empty()) {
			int x = q.front();
			q.pop();
			vector<pii> g;
			for(auto &it : f){
				it.first -= x;
				if(it.first <= 0) q.push(it.second);
				else g.push_back(it);
			}
			f = move(g);
		}
	}
	while(not f.empty()) {
		res ++;
		queue<int> q;
		sort(f.begin(), f.end(), cmp);
		q.push(f.back().second), f.pop_back();
		while(not q.empty()) {
			int x = q.front();
			q.pop();
			vector<pii> g;
			for(auto &it : f){
				it.first -= x;
				if(it.first <= 0) q.push(it.second);
				else g.push_back(it);
			}
			f = move(g);
		}
	}
	cout << res << "\n";

	return 0;
}

F - 隔板与水槽

枚举中间点,贪心

#include <bits/stdc++.h>

using namespace std;

using i32 = int32_t;
using i64 = long long;

#define int i64


using vi = vector<int>;


i32 main(){
	int n;
	cin >> n;
	vi h(n + 1);
	for(int i = 1 ; i <= n; i ++)
		cin >> h[i];
	int res = 0;
	for(int mid = 2 , l , r ; mid < n ; mid ++) {
		l = r = 0;
		for(int i = 1; i < mid ; i ++)
			l = max(l, (mid - i) * min(h[i], h[mid]));
		for(int i = mid + 1; i <= n; i ++) 
			r = max(r, (i - mid) * min(h[i], h[mid]));
		res = max(res, l + r);
	}
	cout << res << "\n";
	return 0;
}

H - 取石子

打表找规律,发现结果之和奇偶有关,因为 Alice 和 Bob 都只能取奇数个。

#include <bits/stdc++.h>

using namespace std;

void solve() {
	int a,b,c;cin >> a >> b >> c;

	a %= 2,b %= 2,c %= 2;

	int ans = (a << 2) + (b << 1) + (c << 0);
	if (ans % 2) cout << "Alice\n";
	else
		cout << "Bob\n";

}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int TC;
	
	for(cin >> TC; TC; TC --)
		solve();
	
	return 0;
}

M - 让二追三

每个位置出现复合条件字符串的是独立的。

#include <bits/stdc++.h>

using namespace std;


using i32 = int32_t;

#define int long long

const int mod = 1e9+7;

int power(int x, int y) {
    int ans = 1;
    while(y) {
        if(y & 1) ans = ans * x % mod;
        x = x * x % mod, y /= 2;
    }
    return ans;
}

int inv(int x) {
    return power(x, mod - 2);
}

void solve(){
    int n, a, b;
    cin >> a >> b >> n;
    if(n < 5) {
        cout << "0\n";
        return;
    }
    int p = a * inv(b) % mod;
    p = (1 - p + mod ) % mod * (1 - p + mod) % mod * p % mod * p %mod * p % mod; 
    cout << (n - 4) * p % mod << "\n";
}

i32 main(){
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int TC;
    for(cin >> TC; TC; TC -- )
        solve();
	return 0; 
}

L - 区间与绝对值

队友写的莫队

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int N = 1e5 + 7;

template<class T>
struct Fenwick{
	vector<T> c;
	int n;
	Fenwick(int _n){
		n = _n;
		c.resize(n + 1);
	}
	T sum(int x){
		T res = 0;
		for (; x ; x -= x & (-x)){
			res += c[x];
		}
		return res;
	}
	void modify(int x,T d){
		for (; x <= n ;x += x & (-x)){
			c[x] += d;
		}
	}
};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n,m;cin >> n >> m;

	vector<int> a(n + 1);
	vector<ll> res(m + 1);

	Fenwick<ll> pre(N);
	Fenwick<ll> siz(N);

	for (int i = 1;i <= n;i++){
		cin >> a[i];
	}

	vector<array<int,3>> qury;

	for (int i = 1;i <= m;i++){
		int l,r;cin >> l >> r;
		qury.push_back({l,r,i});
	}

	int B = 500;

	sort(qury.begin(),qury.end(),[&](array<int,3> a,array<int,3> b){
		int c = a[0] / B;
		if (a[0] / B != b[0] / B) return a[0] / B < b[0] / B;
		return c % 2 ? a[1] < b[1] : a[1] > b[1];
	});

	int l = 1,r = 0;
	ll ans = 0;

	auto add = [&](int x)->void{
		ll p = a[x] * (siz.sum(a[x])) - pre.sum(a[x]);
		ll s = (pre.sum(1e5) - pre.sum(a[x])) - (siz.sum(1e5) - siz.sum(a[x])) * a[x];
		ans += p + s;
		pre.modify(a[x],a[x]);
		siz.modify(a[x],1);
		//cout << ans << endl;
	};

	auto del = [&](int x)->void{
		ll p = a[x] * (siz.sum(a[x])) - pre.sum(a[x]);
		ll s = (pre.sum(1e5) - pre.sum(a[x])) - (siz.sum(1e5) - siz.sum(a[x])) * a[x];
		ans -= p + s;
		siz.modify(a[x],-1);
		pre.modify(a[x],-a[x]);
	};

	for (int i = 0;i < m;i++){
		while (r < qury[i][1]) r++,add(r);
		while (l > qury[i][0]) l--,add(l);
		while (r > qury[i][1]) del(r),r--;
		while (l < qury[i][0]) del(l),l++;
		res[qury[i][2]] = ans;
	}


	for (int i = 1;i <= m;i++){
		cout << 2 * res[i] << "\n";
	}


	return 0;
}

标签:辽宁省,return,int,sum,vector,第四届,using,程序设计,qury
From: https://www.cnblogs.com/PHarr/p/18191848

相关文章

  • SDUTACM山东理工大学第十六届ACM程序设计竞赛
    \[借用SDUT版《不是,哥们》镇楼\]A、欢迎来到山东理工大学第十六届程序设计竞赛(我是听话的乖宝宝)分析分析?没有分析~代码实现#include<bits/stdc++.h>intmain(){std::cin.tie(nullptr)->sync_with_stdio(false);std::cout<<"YES"<<"\n";}B、Q的网课(模拟)......
  • 2024江苏省大学生程序设计大赛(JSCPC)热身赛题解(B)
    题目大意:求区间\([l,r]\)中有多少正整数满足\(\phi(\phi(n))=\phi(n)-1\),其中\(\phi\)为欧拉函数。解:设\(y=\phi(n)\),则上式变为\(\phi(y)=y-1\),易证\(y\)为质数(注意\(\phi(1)=1\),\(1\)与任何正整数都互质)。故原问题转化为求\([l,r]\)中有多少个正整数v满足\(\phi......
  • c语言程序设计——实验报告七
    实验项目名称:实验7数组的基本使用实验项目类型:验证性实验日期:2024年4月22日一、实验目的1.熟练掌握数组的定义格式和数组元素的表示方法2.熟悉数组的初始化方法和赋值方法3.掌握字符数组存放字符串的方法和字符串函数的使用4.熟悉数组元素的操作,特别是输入与输出操作5.......
  • 第十一届山东省大学生程序设计竞赛(正式赛)C题
    Chttps://codeforces.com/gym/103118/problem/C题面:在猫的国度里,任何猫科动物都可以被视为一棵根深蒂固的树。众所周知,猫的体内都隐藏着一种僵尸病毒。因此,一个猫家庭可能由猫和僵尸组成。当一只猫出生时,它可能会变成僵尸。如果一只猫变成了僵尸,它的后代也会变成僵尸。现在给......
  • 程序设计题
    设计一程序实现功能,处理字符串A,处理规则是:只要B字里面有的字母,不分大小写,一律从A字符串中删掉。/***************************************************filename:Pro_StuInfo.c*author:[email protected]*date:2024/05/06*function:设计一程序......
  • 2024“图森未来杯”程序设计邀请赛
    https://voj.mobi/contest/242/problems,密码2024ecnutsolA-调和与折中#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingvi=vector<int>;i32main(){ ios::sync_with_stdio(false),cin.tie(nullptr);......
  • 浙大版C语言程序设计习题11-17
    点击查看代码typedefstructNODE{intdata;structNODE*next;}NODE,*Linkedlist;//初始化头节点voidInit(Linkedlist&L){L=(NODE*)malloc(sizeof(NODE));L->next=NULL;}//尾插法创建链表LinkedlistCreateFromRear(LinkedlistL){NODE*rear=L;for......
  • 【排课小工具】排课程序设计与实现
    课表的完整性意味着,可分配的节点的数量大小等于课表周数的累加和大小,为了进行完整性检测我需要两个对象:课表模板以及课程对象,从课表模板中获取可分配的节点数,从课程对象中获取该课程的上课周次。用户要求每个班级的课表模板相同,这使得完整性检测容易很多。分级填充需求主要和课程......
  • 【排课小工具】排课程序设计与实现
    课表的完整性意味着,可分配的节点的数量大小等于课表周数的累加和大小,为了进行完整性检测我需要两个对象:课表模板以及课程对象,从课表模板中获取可分配的节点数,从课程对象中获取该课程的上课周次。用户要求每个班级的课表模板相同,这使得完整性检测容易很多。分级填充需求主要和课程......
  • C语言程序设计——字符串典型题练习
    1、计算一个字符串中最大的重复子串的字符的数量/********************************************************************* name : CalSubStrMaxCnt* function:计算一个字符串中最大的重复子串的字符的数量* argument:* @str:需要查找的字符串的地址* * ret......