سوالات چالشی هفته پنجم دومین دوره لیگ مایکد به همراه پاسخهای مورد انتظار تست کیسها جهت آشنایی بیشتر شرکتکنندگان در لیگ منتشر میگردد.
پاسخهای تیم برنده جهت افزایش جنبه آموزشی و استفاده سایر شرکتکنندگان پس از آزمون کامنت گذاری شده است.
دریافت
عنوان: سوال چالشی آموزشی توقف زودهنگام
حجم: 419 کیلوبایت
دریافت
عنوان: سوال چالشی جمع مبنای 16
حجم: 256 کیلوبایت
دریافت
عنوان: سوال چالشی mst
حجم: 426 کیلوبایت
پاسخ تیم برنده
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// خواندن ورودی و چاپ خروجی با فایل
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
for (int j = 0; j < 1000; j++)
{
int N;
int T;
cin >> N >> T;
int sum = 0; // مجموع رشدهای معتبر
int prevY = -1000; // مقدار رشد قبلی
int c = 0; // شمارنده تعداد مراحل متوالی بدون افزایش
bool stop = 0; // فلگ توقف سیستم
for (int i = 0; i < N; i++)
{
int x, y;
cin >> x >> y;
if (stop)
continue;
if ((x < 0 || y < 0) || (x > T || y > T))
continue; // بررسی شرط اول
// بررسی توقف زودهنگام
if (prevY != -1000)
{
if (y <= prevY)
{
c++;
if (c == 3)
{
stop = 1; // فعال شدن توقف
continue;
}
}
else
c = 0; // در صورت افزایش رشد، شمارنده ریست میشود
}
sum += y;
prevY = y;
}
cout << sum << endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
/*
تبدیل یک کاراکتر هگزادسیمال به مقدار عددی آن
اگر رقم بین 0 تا 9 باشد مقدار مستقیم برگردانده میشود
اگر بین A تا F (یا a تا f) باشد به بازه 10 تا 15 تبدیل میشود
*/
int hexVal(char c) {
if (c >= '0' && c <= '9')
return c - '0';
return toupper(c) - 'A' + 10;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// خواندن ورودی و چاپ خروجی با فایل
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
string a, b;
while (cin >> a >> b)
{
// معکوس کردن رشتهها برای شروع جمع از رقم کمارزشتر (سمت راست)
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
// تعیین بیشترین طول برای پیمایش
int n = max(a.size(), b.size());
int c = 0, count = 0; // متغیر مقدار و تعداد انتقال ها
for (int i = 0; i < n || c; i++)
{
// اگر از طول رشته عبور کنیم، مقدار آن صفر در نظر گرفته میشود
int na = (i < a.size()) ? hexVal(a[i]) : 0;
int nb = (i < b.size()) ? hexVal(b[i]) : 0;
// جمع دو رقم به همراه انتقال قبلی
int sum = na + nb + c;
// محاسبه انتقال جدید در مبنای 16
c = sum / 16;
// اگر انتقال رخ دهد، شمارنده افزایش مییابد
if (c)
count++;
}
cout << count << endl;
}
return 0;
}
#include <bits/stdc++.h>
#pragma GCC target ("avx,avx2,fma")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define X first
#define Y second
#define endl '\n'
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn = 1007;
//محاسبه فاصله دو نقطه
double dist(pair<double,double> a, pair<double,double> b){
double dx = a.X - b.X;
double dy = a.Y - b.Y;
return sqrt(dx * dx + dy * dy);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n;
while(cin >> n){
vector<pair<double,double>> p(n);
for(int i = 0; i< n; i++){
cin>>p[i].X>>p[i].Y;
}
//کوتاه ترین فاصله راس v از MST
vector mdist(n, 1e9);
//وکتور برای نشانه گذاری اینکه داخل MST هست یا نه
vector mark(n, false);
//مقدار دهی اولیه
mdist[0] = 0;
double ans = 0;
// در هر مرحله نزدیکترین راس به MST مان اضافه میکنیم
for(int i = 0; i < n; i++){
int u = -1;
// پیدا کردن رأسی که کمترین فاصله را از MST دارد
for(int j = 0; j < n; j++){
if(!mark[j] && (u == -1 || mdist[j] < mdist[u])){
u = j;
}
}
//اضافه کردن به جواب و اضافه کردن راس u به MST
mark[u] = true;
ans += mdist[u];
//آپدیت کردن فاصله ها بعد از اضافه کردن راس u یه MST
for(int v = 0; v < n; v++){
if(!mark[v]){
double d = dist(p[u], p[v]);
mdist[v] = min(mdist[v], d);
}
}
}
//چاپ خروجی با گرد کردن رو به بالا
cout<<ceil(ans)<<endl;
}
return 0;
}
دیدگاهها
هیچ نظری هنوز ثبت نشده است.