C-Draw Grids
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
给一组结点,按照 的方式分布。每个人要选择一个点连线到另一个点上,每个点最多与两个点相连,第一个碰到没有点可连的人输掉游戏。因为每个点最多只能拥有两条线,所以可将图看作一排数量为
的结点,容易发现,当且仅当
为偶数时才能赢得比赛。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m; cin>>n>>m;
puts((n*m)&1? "NO" : "YES");
return 0;
}
D-Er Ba Game
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
按照题意模拟即可。注意平局的判断方式。
代码:
#include<bits/stdc++.h>
using namespace std;
inline void solve() {
int a1, b1, a2, b2; scanf("%d%d%d%d",&a1, &b1, &a2, &b2);
if(a1>b1) swap(a1, b1);
if(a2>b2) swap(a2, b2);
int x1, x2;
if(a1==2 && b1==8) x1=1;
else if(a1==b1) x1=2;
else x1=3;
if(a2==2 && b2==8) x2=1;
else if(a2==b2) x2=2;
else x2=3;
if(x1!=x2) puts(x1<x2? "first" : "second");
else if(x1==1) puts("tie");
else if(x1==2) puts(a1==a2? "tie" : (a1>a2? "first" : "second"));
else {
int c1=(a1+b1)%10, c2=(a2+b2)%10;
puts(c1==c2? (b1==b2? "tie" : (b1>b2? "first" : "second")) : (c1>c2? "first" : "second"));
}
}
int main() {
int cases; cin>>cases;
while(cases--) solve();
return 0;
}
K-Stack
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
通过伪代码可以发现,当新的数字加入时,堆栈会弹出所有大于它的数。因此可以将大的数放在前面,小的数放在后面以减少容量或控制容量不变。而容量在每次操作时最多增加 1,且不大于当前的下标值。
因此可以特判,在输入阶段直接对容量大于当前的下标值的数据返回 -1 结果。再从 1 遍历到 n 根据已有位置容量推导当前位置的容量值,并记录在数组中。已知后方某个位置的容量比当前大时,向该位置遍历时不断将容量值加 1,反之减 1,直到等于为止,如果到该位置时仍然比应有的容量小,则返回 -1 结果。遇到后方无已知值时无需加减。
将推导出来的数组按容量从小到大,下标从大到小排列。从 1 到 n 给第 i 个元素对应 a 数组的位置赋值 i,再打印 a 数组,即为结果。
代码:
#include<bits/stdc++.h>
using namespace std;
using ld=long double; using ll=long long; using ull=unsigned long long; using pii=std::pair<int, int>; using pll=std::pair<long long, long long>; using pil=std::pair<int, long long>; using pli=std::pair<long long, int>;
#define all(_tmp) _tmp.begin(),_tmp.end()
#define fir first
#define sec second
const int mod=1e9+7;
const int maxn=1e6;
int ans[maxn|1];
pii li[maxn|1], lb[maxn+1];
int main() {
int n, m; cin>>n>>m;
bool sampfalse=0;
for(int i=1; i<=m; i++) {
scanf("%d%d", &li[i].fir, &li[i].sec);
lb[li[i].fir]=(pii){li[i].fir, li[i].sec};
sampfalse=(li[i].fir-li[i].sec<0);
if(li[i].fir-li[i].sec<0) {
puts("-1");
return 0;
}
}
if(sampfalse) {
puts("-1");
return 0;
}
sort(li+1, li+m+1); for(int i=1; i<m; i++) {
if(li[i+1].fir-li[i].fir<li[i+1].sec-li[i].sec) {
puts("-1");
return 0;
}
int dx=li[i+1].sec==li[i].sec? 0 : (li[i+1].sec>li[i].sec? 1 : -1);
for(int ji=li[i].fir, jj=li[i].sec; ji<=li[i+1].fir; ji++) {
lb[ji]=(pii){ji, jj};
if(jj!=li[i+1].sec) jj+=dx;
}
}
for(int i=1, j=1; i<=li[1].fir; i++) {
lb[i]=(pii){i, j};
if(j<li[1].sec) j++;
}
for(int i=li[m].fir, j=li[m].sec; i<=n; i++) lb[i]=(pii){i, j};
sort(lb+1, lb+n+1, [](const pii& a, const pii& b){ return a.second==b.second? a.first>b.first : a.second<b.second; });
for(int i=1; i<=n; i++) ans[lb[i].first]=i;
for(int i=1; i<=n; i++) printf("%d ", ans[i]);
putchar('\n');
return 0;
}



京公网安备 11010502036488号