【整活】OI的那些奇妙小操作(Part 1)
卡时
在C++里,有(double)clock()/CLOCKS_PER_SEC这一行代码可以获得当前已经运行的时间。
初见端倪,也就是说,当你使用一些暴力算法(暴搜)的时候,你可以通过计算当前已经运行的时间并判断是否将要超时,如果要超时就直接输出目前的最好策略,如:
核桃OJ CSP-S模拟赛 P10771 抓娃娃
#include<bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn=2e6;
int T;
int n, m;
struct mat {
vector<vector<int>> a;
mat(int width, int height, int init=1){
a.resize(height);
for(int i=0;i<height;i++) {
a[i].resize(width);
for(int j=0;j<a[i].size();j++)
a[i][j]=init;
}
}
mat operator*(const mat& T) const {
mat res(n, 1, 0);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
res.a[0][i]+=a[0][j]*T.a[j][i];
}
}
return res;
}
};
signed main() {
freopen("xcx.in","r",stdin);
freopen("xcx.out","w",stdout);
scanf("%lld",&T);
for(int _=1;_<=T;_++) {
scanf("%lld%lld",&n,&m);
mat init(n,1), mult(n,n,0);
while(m--) {
int x, y;
scanf("%lld%lld",&x,&y);
mult.a[x-1][y-1]=1;
}
int res=0;
double start=(double)clock()/CLOCKS_PER_SEC;
while(++res) {
init = init*mult;
int num=0;
for(int ele : init.a[0]) {
if(ele!=0) num+=1;
if(num==2) break;
}
if(num==1) {
puts("Let's play");
printf("%lld\n",res);
break;
} else if((double)clock()/CLOCKS_PER_SEC - start >= (1.0/T)) {
puts("Poor cx");
break;
}
}
}
return 0;
}
静态内存计算
bool start;
/* 变量定义 */
bool end;
// 输出end - start可以得到变量的静态内存,以MB为单位

浙公网安备 33010602011771号