【Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)】 A.B.C.D
前言
在晚上的div2之前開啟的這場,但是自己頭腦貌似不太清醒,全程在寫bug,而且B題不知道自己在寫啥,寫了一百多行?,C也寫了好多bug導致最後的D一眼思路但是沒寫完。希望晚上狀態不要這麼差!QWQ
A. Golden Plate
題意
給你一個h*w的長方形邊框,每減小一次h-=4,w-=4,問從當前大小減小k-1次,
總的周長是多少
做法
直接模擬
程式碼
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
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. Curiosity Has No Limits
題意
題意就是給你一個A序列和一個B序列
讓你構造一個t序列,t序列滿足
&
做法
賽中自己沒什麼想法,於是就寫了個dp
dp[i][j]表示第i個位置放j是否合法,之後就暴力跑就可以了
程式碼
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn = 1e5+5;
int dp[maxn][4];
int pre[maxn][4];
int t[maxn];
int a[maxn],b[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n-1;i++) scanf("%d",&a[i]);
for(int i=1;i<=n-1;i++) scanf("%d",&b[i]);
for(int i=0;i<=3;i++) dp[1][i]=1;
int flag=0;
for(int i=2;i<=n;i++)
{
if(a[i-1]==0)
{
if(b[i-1]==0)
{
if(dp[i-1][0])
{
pre[i][0]=0;
dp[i][0]=1;
}
}
else
{
flag=1;
break;
}
}
else if(a[i-1]==1)
{
if(b[i-1]==2||b[i-1]==3)
{
flag=1;
break;
}
else if(b[i-1]==0)
{
if(dp[i-1][0])
{
pre[i][1]=0;
dp[i][1]=1;
}
if(dp[i-1][1])
{
pre[i][0]=1;
dp[i][0]=1;
}
}
else
{
if(dp[i-1][1])
{
pre[i][1]=1;
dp[i][1]=1;
}
}
}
else if(a[i-1]==2)
{
if(b[i-1]==1||b[i-1]==3)
{
flag=1;
break;
}
else if(b[i-1]==0)
{
if(dp[i-1][0])
{
pre[i][2]=0;
dp[i][2]=1;
}
if(dp[i-1][2])
{
pre[i][0]=2;
dp[i][0]=1;
}
}
else
{
if(dp[i-1][2])
{
pre[i][2]=2;
dp[i][2]=1;
}
}
}
else
{
if(b[i-1]==0)
{
if(dp[i-1][0])
{
pre[i][3]=0;
dp[i][3]=1;
}
if(dp[i-1][1])
{
pre[i][2]=1;
dp[i][2]=1;
}
if(dp[i-1][2])
{
pre[i][1]=2;
dp[i][1]=1;
}
if(dp[i-1][3])
{
pre[i][0]=3;
dp[i][0]=1;
}
}
else if(b[i-1]==1)
{
if(dp[i-1][1])
{
pre[i][3]=1;
dp[i][3]=1;
}
if(dp[i-1][3])
{
pre[i][1]=3;
dp[i][1]=1;
}
}
else if(b[i-1]==2)
{
if(dp[i-1][2])
{
pre[i][3]=2;
dp[i][3]=1;
}
if(dp[i-1][3])
{
pre[i][2]=3;
dp[i][2]=1;
}
}
else
{
if(dp[i-1][3])
{
pre[i][3]=3;
dp[i][3]=1;
}
}
}
}
int tt=0;
for(int i=0;i<=3;i++)
{
if(dp[n][i]) tt=1;
}
if(flag==1||tt==0)
{
printf("NO\n");
return 0;
}
else
{
for(int i=0;i<=3;i++)
{
if(dp[n][i]) t[n]=i;
}
for(int i=n-1;i>=1;i--)
{
t[i]=pre[i+1][t[i+1]];
}
printf("YES\n");
for(int i=1;i<=n;i++) printf("%d ",t[i]);
}
return 0;
}
C. Cram Time
題意
給你兩個數a,b,用a,b分別構造兩個序列A,B,
要求A序列的和小於a,B序列的和小於b
而且A序列中和B序列中每個數最多在兩個序列中出現一次
要是最終的兩個序列的長度和最大,輸出兩個序列
做法
如果a+b>=(1+2+3+…n),一定可以構造出(1+2+3+…n)
至於構造方法,就先用a,b中大的數從大到小選,再用小的從大到小選,就OK了!
程式碼
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn = 1e5+5;
ll a,b;
vector<int> v1,v2;
int vis[maxn];
int main()
{
scanf("%lld%lld",&a,&b);
ll sum=a+b;
ll pos=0;
for(ll i=0;;i++)
{
if((1LL*i*(i+1))/2==sum)
{
pos=i;
break;
}
else if((1LL*i*(i+1))/2>sum)
{
pos=i-1;
break;
}
}
ll maxx=max(a,b);
ll minn=min(a,b);
ll tmp=sum-(1LL*pos*(pos+1))/2;
for(int i=pos;i>=1;i--)
{
if(maxx>=i)
{
v1.push_back(i);
maxx-=(i);
vis[i]=1;
}
}
for(int i=pos;i>=1;i--)
{
if(vis[i]) continue;
if(minn>=i)
{
v2.push_back(i);
vis[i]=1;
minn-=i;
}
}
相關推薦
Codeforces Round #528 (Div. 1, based on Technocup 2019 Elimination Round 4) 自閉記
整天自閉。
A:有各種討論方式。我按橫座標排了下然後討論了下縱座標單調和不單調兩種情況。寫了15min也就算了,誰能告訴我printf和cout輸出不一樣是咋回事啊?又調了10min啊?
#include<iostream>
#include<cstdio
【Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) C. Cram Time】 貪心
C. Cram Time
題意
給你兩個數a,b,用a,b分別構造兩個序列A,B, 要求A序列的和小於a,B序列的和小於b 而且A序列中和B序列中每個數最多在兩個序列中出現一次 要是最終的兩個序列的長度和最大,輸出兩個序列
做法
【Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path】dp+滾動陣列
D. Minimum path
題意
給你一個字元矩陣,起點在左上角,每次可以向右或者向下走,可以改變這個字元矩陣中的k個字元,是這個路徑構成的字串字典序最小。
做法
由於可以改變k個字元,那麼肯定是找到一條路徑,前面至少有k項為a, 後面按照字典序選擇路徑就可以。 所
【Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)】 A.B.C.D
前言
在晚上的div2之前開啟的這場,但是自己頭腦貌似不太清醒,全程在寫bug,而且B題不知道自己在寫啥,寫了一百多行?,C也寫了好多bug導致最後的D一眼思路但是沒寫完。希望晚上狀態不要這麼差!QWQ
A. Golden Plate
題意
給你一個h*w的長方形邊框,
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)
https://codeforces.com/contest/1072/problem/D
題意
給你一個n*n充滿小寫字母的矩陣,你可以更改任意k個格子的字元,然後輸出字典序最小的從[1,1]到[n,n]的路徑(1<=n<=2000)
思路
我的
定義dp[i][j]為
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思維,DP,字串)
#include<bits/stdc++.h>using namespace std;char c[2007][2007];char ans[4007];int s[2007][2007];int main(){ memset(s,-1,sizeof(s));&
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思維,DP,字符串)
bsp mes () print urn getch %d ase etc #include<bits/stdc++.h>using namespace std;char c[2007][2007];char ans[4007];int s[2007][2007
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)
A題
題裡給公式了,所有直接套即可,記得判斷w,h是否小於零
#include <bits/stdc++.h>
using namespace std;
typedef long
Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模擬】
傳送門:http://codeforces.com/contest/1087/problem/C
C. Connect Three
time limit per test
1 second
memory limit per test
256 me
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2):D. Minimum path(思維)
D. Minimum path
time limit per test1.5 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Ticket
足夠 scan property ++ inter digits pos 通過 題意
C. Vasya and Golden Ticket
time limit per test
1 second
memory limit per test
256 megabytes
Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)
A. Kitchen Utensils
找到k在餐具中的大倍數
#include<bits/stdc++.h>
#include<vector>
using namespace std;
const int maxn=105;
int a[maxn];
int mai
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) A-D題解
比賽傳送門
A. In Search of an Easy Problem
最樸素的解法,掃一邊有木有1。。。。。
#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
usi
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1)
比賽傳送門
A題.水題
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
bool flag=false;
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) B. Vasya and Cornfield
題解
題目大意 n和d 還有m個點的x y座標 問座標是否在(0, d) (d, 0) (n-d, n) (n, n-d)四個點圍城的矩形內
判斷矩形不好判斷 可以判斷是否在四個角的三角形內 不包括邊上
AC程式碼
#include <stdio.h>
Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4)題解
2018-12-24晚小上一波分,這套比賽差點翻車,還好最後15分鐘弄出了C,交C的
時候心裡一點底都沒有,因為C的情況可能超過我的想象,現在看來我的擔心是不
必要的。。。然後倒數20多秒絕殺了D題。。這道題很有自信樣例都沒測直接交果
然也過了,後面的題目都沒時間來得及看。。。賽後補好了。
 
Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4)
隨手寫一篇部落格吧0.0
A. Right-Left Cipher
直接模擬,偶數在左邊,奇數在右邊。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<strin
Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4)-A. Right-Left Cipher(模擬)
題目連結:http://codeforces.com/contest/1087/problem/A
題意:給你一個加密後的字串讓你解密。加密的過程是
思路:從中間開始向兩邊輸出,如果是偶數再多輸出一位。
#include<bits/stdc++.h>
u
(AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round
A. Right-Left Cipher
time limit per test
1 second
memory limit per test
256 megabytes
input
standard inp
Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) D Minimum Diameter Tree
題目:Minimum Diameter Tree
思路:
可以把s儘量平均的分配給葉子節點所連的邊,直徑就是這個平局值*2。
給出兩組也許有用的資料:
Input:
2 2
1 2
Output:
2
Input:
12 1000
1 2
1 3
1 4
1