【Codeforces - Mail.Ru Cup 2018 Round 3 】A.B.C.D.E
前言
又是一個深夜場,本來想給biubiubiu_上個紫,沒想到全程不在狀態,最後四題,E甚至都沒讀題,賽後讀題+寫題直接半小時就過了,開場又是寫錯一個for迴圈的變數,導致7分鐘才過掉a,之後看b感覺是一個好難的題,沒什麼思路,畫個圖想了一個做法,tle,開啟程式碼一看一個O(1e9)的for迴圈擺在那裡,趕緊優化掉,0:22過掉之後D過的比C多,想了一個nlogn的貪心然後wa了,反向貪心又wa了,仔細思考一下,01:31一個sort就過了,回頭看C,**互動模擬題,不知道為什麼比D過的少,直接寫,寫完交,返回未知錯誤,我以為是哪裡不合法,一直找問題,最後加了個’\n’,就過了?2:28過掉C,宣告GG。賽後看D,sdHash題,分析一下複雜度,就是個nlogn,寫完之後被卡ull的單hash,向pls學習了一波多hash的模板之後過掉了。
biubiubiu_ rating-=27 1888->1861
A. Determine Line
題意
給你n個序列,每個序列中的數在該序列中只出現一次,
輸出在n個序列中都出現過的數
,每個數的值域為1-100
做法
先統計在第一個序列中出現過的,之後只儲存所有之前出現過的就可以了。
我這個做法不是很好,我們其實只要統計哪些數出現過n次就可以了。
程式碼
#include<stdio.h>
int vis[105];
int vis2[105];
int main()
{
int n,x,y;
scanf("%d",&n);
scanf("%d",&x);
while (x--)
{
scanf("%d",&y);
vis[y]=1;
}
for(int i=1;i<=n-1;i++)
{
scanf("%d",&x);
for(int j=1;j<=100;j++) vis2[j]=0;
while(x--)
{
scanf("%d",&y);
vis2[y]=1;
}
for(int j=1;j<=100;j++)
{
if(vis[j]&&vis2[j]) vis[j]=1;
else vis[j]=0;
}
}
for(int i=1;i<=100;i++) if(vis[i]) printf("%d ",i);
printf("\n");
return 0;
}
B. Divide Candies
題意
給你一個n*n的方格,點(i,j)的權值為
問這個方格內有多少個數是m的倍數
做法
如上圖藍色陰影用藍色塊翻倍算,紅色陰影用紅色塊翻倍算,紫色塊自己算
程式碼
#include<stdio.h>
typedef long long ll;
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
ll cnt=0;
for(ll i=1;i<=m;i++)
{
for(ll j=1;j<=m;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ll ans=((n/m)*(n/m))*cnt;
cnt=0;
for(ll i=(n-n%m)+1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ans+=2LL*cnt*(n/m);
cnt=0;
for(ll i=(n-n%m)+1;i<=n;i++)
{
for(ll j=(n-n%m)+1;j<=n;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ans+=cnt;
printf("%lld\n",ans);
return 0;
}
C. Pick Heroes
題意
有兩個勢力,給你2*n個英雄,每個英雄有戰鬥力,兩方輪流選擇英雄
有m對英雄有捆綁關係,對於每對捆綁的英雄,若某一個被其中一方選擇
則下個回合另一方必須選擇捆綁的另一個英雄
要求儘量使所選英雄總戰鬥力值最大
如果最開始輸入1,則表示你先選擇,否則對手先選擇
做法
首先如果我們先手,我們肯定先選完所有捆綁英雄中最戰鬥力大的那一個,
之後剩下的英雄中不斷選擇戰鬥力最高的就可以
如果我們後手,對手選擇捆綁英雄的情況我們只能跟著選
否則我們直接轉守為攻,選擇完所有捆綁英雄,
之後再每次可以選的時候直接選剩下的英雄裡戰鬥力最大的
程式碼
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn = 1e4+5;
int vis2[maxn];
int vis[maxn];
int l[maxn],r[maxn];
struct data
{
int id,num;
}a[maxn];
bool cmp(const data &a,const data &b)
{
return a.num<b.num;
}
int xx[maxn];
int main()
{
int n,m,x;
scanf("%d%d",&n,&m);
for(int i=1;i<=2*n;i++)
{
scanf("%d",&a[i].num);
a[i].id=i;
xx[i]=a[i].num;
}
sort(a+1,a+1+2*n,cmp);
for(int i=1;i<=m;i++) scanf("%d%d",&l[i],&r[i]);
int op;
scanf("%d",&op);
if(op==1)
{
int pos=1;
for(int i=1;i<=n;i++)
{
if(pos<=m)
{
if(xx[l[pos]]>xx[r[pos]])
{
vis[l[pos]]=1;
printf("%d\n",l[pos]);fflush(stdout);
}
else
{
vis[r[pos]]=1;
printf("%d\n",r[pos]);fflush(stdout);
}
pos++;
}
else
{
for(int j=2*n;j>=1;j--)
{
if(!vis[a[j].id])
{
vis[a[j].id]=1;
printf("%d\n",a[j].id);fflush(stdout);
break;
}
}
}
scanf("%d",&x);
vis[x]=1;
}
}
else
{
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
vis[x]=1;
int flag=0;
for(int j=1;j<=m;j++)
{
if(vis2[j]) continue;
if(l[j]==x)
{
vis2[j]=1;
flag=1;
vis[r[j]]=1;
printf("%d\n",r[j]);fflush(stdout);
break;
}
else if(r[j]==x)
{
vis2[j]=1;
flag=1;
vis[l[j]]=1;
printf("%d\n",l[j]);fflush(stdout);
break;
}
}
if(flag==0)
{
int ff=0;
for(int j=1;j<=m;j++)
{
if(!vis2[j])
{
ff=1;
vis2[j]=1;
if(xx[l[j]]>xx[r[j]])
{
vis[l[j]]=1;
printf("%d\n",l[j]);fflush(stdout);
}
else
{
vis[r[j]]=1;
printf("%d\n",r[j]);fflush(stdout);
}
break;
}
}
if(ff==0)
{
for(int j=2*n;j>=1;j--)
{
if(!vis[a[j].id])
{
vis[a[j].id]=1;
printf("%d\n",a[j].id);fflush(stdout);
break;
}
}
}
}
}
}
return 0;
}
D. Decorate Apple Tree
題意
給你一棵樹每個葉子節點上都有一個顏色,
前言
又是一個深夜場,本來想給biubiubiu_上個紫,沒想到全程不在狀態,最後四題,E甚至都沒讀題,賽後讀題+寫題直接半小時就過了,開場又是寫錯一個for迴圈的變數,導致7分鐘才過掉a,之後看b感覺是一個好難的題,沒什麼思路,畫個圖想了一個做法,tle,開啟程式碼一看一個O(1e9) https://codeforces.com/contest/1056/problem/B
題意:輸入n,m 求((a*a)+(b*b))%m==0的(a,b)種數(1<=a,b<=n) (n<=1e9,m<=1000)
題解:由於a,b的數量級
B. Divide Candies
題意
給你一個n*n的方格,點(i,j)的權值為
i
2
E. Check Transcription
題意
給你一個01串s,一個字串t,
0
可
D. Decorate Apple Tree
題意
給你一棵樹每個葉子節點上都有一個顏色, 如果某個節點是好節點,要滿足他子樹內所有的葉子節點顏色不同
對
http://codeforces.com/contest/1054/problem/D
題目大意:一個序列a1 a2...an,可以對若干個元素進行取反,使所得的新序列異或和為0的區間個數最多.
題目分析:首先易知每個位置的字首異或和的值只有兩種,因為對元素進行取反時,取偶數個元素異或和不變,奇數個元素
A. Metro
#include<cstdio>
int main(){
int n,s;
int a[1005],b[1005];
while(~scanf("%d%d",&n,&s)){
int k=0;
for(int i=0;i<n;i A. Determine Line
Water.
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 int n, vis[110];
5
6 int main()
7 {
8 while
題目連結:CF
題意:給出n,讓你找出 (x*x+y*y)%m==0的點對(0<x<=n,0<y<=n),問有多少對。
參考官方題解:(x*x+y*y)%m==0,等價於 ((x%m)^2+(y%m)^2)%m==0,設i=x%m,j=y%m,即座標範圍n*n內滿
Description:
有一個長度為n的整數序列,Li表示在第i個數的左邊有多少個數比它大,Ri表式在第i個數的右邊有多少個數比它大
(li is the number of indices j (1≤j<i), such that ai<aj and ri ini r+ inf con n+1 決策 int 方程 pac A:簽到
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#
前言
在晚上的div2之前開啟的這場,但是自己頭腦貌似不太清醒,全程在寫bug,而且B題不知道自己在寫啥,寫了一百多行?,C也寫了好多bug導致最後的D一眼思路但是沒寫完。希望晚上狀態不要這麼差!QWQ
A. Golden Plate
題意
給你一個h*w的長方形邊框,
前言
biubiubiu_
r
a
t
i
【連結】 我是連結,點我呀:) 【題意】
【題解】
因為只會增加。 所以。 一開始暴力算出來初始答案 每次改變一個點的話。 就只需要看看和他相鄰的數字的值就好。 看看他們是不是大於l 分情況增加、減少答案就好
【程式碼】
#include <bits/stdc++.h& 因為睡過了只好vp。
A:閱讀理解。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
【題目】
D. Changing Array
【描述】
給n個整數a[1],...,a[n],滿足0<=a[i]<=2^k-1。Vanya可以對這n個數中任一多個數進行操作,即將x變為x',其中x'指x限制在k位內二進位制取反。問a[1],...,a[n]中最多有多少個連續子段的異或和不為0 【題目】
B. Appending Mex
【描述】
Ildar定義了一種方法,可以由一個數組產生一個數。具體地,從這個陣列中任選一個子集,不在這個子集中的最小的非負整數稱為mex,就是由這個陣列得到的數。初始時刻Ildar的陣列是一個空陣列,通過上述方法得到某個mex,加入到陣列的尾端,不斷重複以上操 【題目】
A. Elevator or Stairs?
【描述】
Masha要從第x層樓去第y層樓找Egor,可以選擇爬樓梯或者坐直升電梯。已知爬樓梯每層需要時間t1;坐直升電梯每層需要時間t2,直升電梯開門或者關門一次需要時間t3,當前直升電梯在第z層樓,直升電梯門是在關閉狀態的。如果爬樓梯總時間嚴格 設在第 $x$ 天二人都 lucky,則有 $\DeclareMathOperator{\lcm}{lcm}$ $ x = y_a t_a + l_a + R_a $ $ x= y_b t_ b + l_b + R_b$
令 $L_a = r_a - l_a + 1, L_b = r_b - l_b + 1 A. Metro
Solved.
題意:
有兩條鐵軌,都是單向的,一條是從左往右,一條是從右往左,Bob要從第一條軌道的第一個位置出發,Alice的位置處於第s個位置,有火車會行駛在鐵軌上,一共有n個站點,1表示火車會在該站點停下,0表示不會,求Bob能否到達地s個位置(到達任意一邊即可)
思路:
如果某個節點是好節點,要滿足他子樹內所有的葉子節點顏色不同
相關推薦
【Codeforces - Mail.Ru Cup 2018 Round 3 】A.B.C.D.E
[codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思維+數學]
【Mail.Ru Cup 2018 Round 3 B. Divide Candies】分析+暴力
【Mail.Ru Cup 2018 Round 3 E. Check Transcription 】Hash+尺取
【Mail.Ru Cup 2018 Round 3 D. Decorate Apple Tree】排序+思維
[codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]
Codeforces Mail.Ru Cup 2018 Round 2
Mail.Ru Cup 2018 Round 3 Solution
B. Divide Candies Mail.Ru Cup 2018 Round 3 (數學)
Codeforces Mail.Ru Cup 2018 Round 1 C. Candies Distribution(構造)
Mail.Ru Cup 2018 Round 3
【Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)】 A.B.C.D
【 Educational Codeforces Round 55 (Rated for Div. 2)】 A.B.C.D.E.
【Mail.Ru Cup 2018 Round 2 B】 Alice and Hairdresser
Mail.Ru Cup 2018 Round 1 virtual participate記
[題解]Mail.Ru Cup 2018 Round 1 - D. Changing Array
[題解]Mail.Ru Cup 2018 Round 1 - B. Appending Mex
[題解]Mail.Ru Cup 2018 Round 1 - A. Elevator or Stairs?
Mail.Ru Cup 2018 Round 2 Problem C Lucky Days
Mail.Ru Cup 2018 Round 2 Solution