Atcoder Panasonic Programming Contest 2020 部分题解
上课上到一半被拉出来打这场。结果被教育了。
做题顺序: A(AC)->B(WA)->E(未交)->C(AC)->E(WA)->D(AC)->B(AC)->E(WA)
A:上来直接把下标写成\(n\)和\(n+1\),结果 \(WA\) 两次,直接心态爆炸
代码就不放了。
B:
题意:\(n \times m\) 的棋盘上,一个棋子被放在 \((1,1)\) 位置,每次它能移动到所有 \(x + y\) 和 \(x - y\) 相等的格子上,问一共能访问多少个格子
看样例,答案就是 \(\left\lceil\dfrac{n \times m}{2}\right\rceil\) 哈哈哈哈
结果 \(WA\)
因为 \(n = 1\) 或 \(m = 1\) 时,它不能移动到其他任何一个格子上,所以答案是 \(1\)
\(76\) min 过了这题
int main()
{
cin>>a>>b;
if(a > b) swap(a,b);
if(a == 1) cout<<1<<endl;
else cout<<(ll)((ll)a*b+1)/2;
return 0;
}
C:
题意:判断 \(\sqrt a + \sqrt b\) 是否小于 \(\sqrt c\)。
刚开始想判掉相等的情况再直接比较,结果又 \(WA\)
正确解法:两边平方,移项,再平方,得到:
\[4ab < (c - a - b)^2
\]
还可以注意到:\(c < a + b\) 时一定非法,要判掉
ll a,b,c;
int main()
{
cin>>a>>b>>c;
if(c - a - b >= 0 && 4 * a * b < (c - a - b) * (c - a - b)) puts("Yes");
else puts("No");
return 0;
}
D:
题意:不想写了(太长了)
直接搜,注意每次填下一个字符只能填到当前最大字符+1,防止重复。(这题我是1A)
这次放完整代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mit map<int,int>::iterator
#define sit set<int>::iterator
#define itrm(g,x) for(mit g=x.begin();g!=x.end();g++)
#define itrs(g,x) for(sit g=x.begin();g!=x.end();g++)
#define ltype int
#define rep(i,j,k) for(ltype(i)=(j);(i)<=(k);(i)++)
#define rap(i,j,k) for(ltype(i)=(j);(i)<(k);(i)++)
#define per(i,j,k) for(ltype(i)=(j);(i)>=(k);(i)--)
#define pii pair<int,int>
#define fi first
#define se second
#define mpr make_pair
#define pb push_back
#define fastio ios::sync_with_stdio(false)
const int inf=0x3f3f3f3f,mod=1000000007;
const double pi=3.1415926535897932,eps=1e-6;
void chmax(int &x,int y){if(x < y) x = y;}
void chmin(int &x,int y){if(x > y) x = y;}
int n;
string cur;
vector<string> v;
void dfs(int x,int y) {
if(x == n){
v.pb(cur);
return;
}
rep(i,1,y+1) {
cur[x] = i + 96;
dfs(x + 1,max(y,i));
}
}
int main()
{
scanf("%d",&n);
cur.resize(n);
dfs(0,0);
rap(i,0,v.size()) cout<<v[i]<<endl;
return 0;
}
最后居然只掉了 \(14\) 点。。

浙公网安备 33010602011771号