这次是和队友一次小训练,感觉一开始题不是很难,写了8道题了,还是没有觉得有什么明显难度的,现在还没有碰到DP什么的,但是模拟,DFS建树,并查集倒是用了一下,算得上是复习吧...
剩下4道再补;
A-StarCraft(巨水)
题目链接:https://ac.nowcoder.com/acm/contest/303/A
题目大意:中文题
思路:输入输出
AC:
int main()
{
std::ios::sync_with_stdio(false);
int n;
while(cin>>n)
cout<<1998+n<<endl;
}
B-Fibonacci and Counting(规律)
题目链接:https://ac.nowcoder.com/acm/contest/303/B
题目大意:中文题
思路:找规律,发现每一个都可以推到前面的那个状态
AC:
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
int x;
cin>>x;
if(x==1)
cout<<2<<endl;
else
cout<<x+1<<endl;
}
}
}
C-LCPS
题目链接:https://ac.nowcoder.com/acm/contest/303/C
题目大意:英文题,没看,不会
思路:不会
D-Campaign(看成二进制暴力)
题目链接:https://ac.nowcoder.com/acm/contest/303/D
题目大意:中文题
思路:一个七位的二进制数,然后1代表守护,0代表放弃,然后选出能够守护的最多的配合
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=2e4+10;
const int INF=0x3f3f3f3f;
const ll mod=1e9+7;
struct Edge{
int v,w,nxt;
Edge(int _v=0,int _w=0,int _nxt=0):
v(_v),w(_w),nxt(_nxt){}
}edge[MAXN<<1];
int head[MAXN],ecnt;
void intt()
{
clean(head,-1);
ecnt=0;
}
void add(int u,int v,int w)
{
edge[ecnt]=Edge(v,w,head[u]);
head[u]=ecnt++;
}
//-------------------------
struct node{
ll l,r;
}home[10];
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
ll sump;
cin>>sump;
for(int i=0;i<7;++i)
cin>>home[i].l>>home[i].r;
ll ans=0;
for(int i=0;i<(1<<7);++i)
{
//对于每个基地,最小人数满足&&最大人数不超过
ll remain,minsum=0,maxsum=0,res=0;
for(int j=0;j<7;++j)
{
if(1&(i>>j))
{
minsum+=home[j].l;
maxsum+=home[j].r;
res++;
}
}
if(minsum<=sump&&maxsum>=sump)
ans=max(ans,res);
}
cout<<ans<<endl;
}
}
}
E-Build Pylons(观察水题...)
题目链接:https://ac.nowcoder.com/acm/contest/303/E
题目大意:中文题,很清晰
思路:看样例,然后观察思考发现因为展开需要k时间,所以最后总会在一个地方等待展开,然后中间的过程总会要走的,只要不走回头路,时间是不变的,因此直接从大到小拍一下,然后遍历一遍即可,范围我目测 ll,就直接开 ll 了,
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=1e4+10;
const int INF=0x3f3f3f3f;
const ll mod=1e9+7;
struct Edge{
int v,w,nxt;
Edge(int _v=0,int _w=0,int _nxt=0):
v(_v),w(_w),nxt(_nxt){}
}edge[MAXN<<1];
int head[MAXN],ecnt;
void intt()
{
clean(head,-1);
ecnt=0;
}
void add(int u,int v,int w)
{
edge[ecnt]=Edge(v,w,head[u]);
head[u]=ecnt++;
}
//-------------------------
int x[MAXN];
int n,k;
int main()
{
int T;
while(cin>>T)
{
while(T--)
{
cin>>n>>k;
for(int i=1;i<=n;++i)
{
cin>>x[i];
}
sort(x+1,x+1+n);
ll ans=0,res=0;
if(n==1)
{
cout<<k<<endl;
continue;
}
for(int i=2;i<=n;++i)
ans+=(x[i]-x[i-1])*(x[i]-x[i-1]);
ans+=k;
cout<<ans<<endl;
}
}
}
F-Pylon Link(并查集||二分)
题目链接:https://ac.nowcoder.com/acm/contest/303/F
题目大意:中文题
思路:1.把所有的点之间连上边,然后并查集找到使这个图联通的那些边,然后找出最长的那一条/2;
2.二分出正确答案O(n^2 * log(n))的复杂度,我觉得这种方法可以写,但是没有尝试
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=2e4+10;
const int INF=0x3f3f3f3f;
const ll mod=1e9+7;
const double PI=acos(-1.0);
struct Edge{
int v,w,nxt;
Edge(int _v=0,int _w=0,int _nxt=0):
v(_v),w(_w),nxt(_nxt){}
}edge[MAXN<<1];
int head[MAXN],ecnt;
void intt()
{
clean(head,-1);
ecnt=0;
}
void add(int u,int v,int w)
{
edge[ecnt]=Edge(v,w,head[u]);
head[u]=ecnt++;
}
//-------------------------
struct node{
int a,b;
double l;
}line[510*510];
double dots[510][2];
int pre[510];
bool cmp(node a,node b)
{
return a.l<b.l;
}
int find(int a)
{
int e=a;
while(pre[a]!=a)
a=pre[a];
int up=e;
while(pre[e]!=a)
{
e=pre[e];
pre[up]=a;
up=e;
}
return a;
}
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
for(int i=0;i<510;++i)
pre[i]=i;
int n;
cin>>n;
for(int i=1;i<=n;++i)
cin>>dots[i][0]>>dots[i][1];
int k=0;
for(int i=1;i<=n;++i)
{
for(int j=i+1;j<=n;++j)
{
line[k].a=i;
line[k].b=j;
line[k].l=sqrt((dots[i][0]-dots[j][0])*(dots[i][0]-dots[j][0])+(dots[i][1]-dots[j][1])*(dots[i][1]-dots[j][1]));
++k;
}
}
//cout<<k<<endl;
sort(line,line+k,cmp);
int ans=0;
//cout<<"get_ans:"<<endl;
for(int i=0;i<k;++i)
{
//cout<<i<<endl;
if(find(line[i].a)!=find(line[i].b))//任意一个没有被标记
{
pre[find(line[i].a)]=find(line[i].b);
int res=ceil(line[i].l/2);
//cout<<line[i].a<<" "<<line[i].b<<" "<<res<<endl;
ans=max(ans,res);
}
}
cout<<ans<<endl;
}
}
}
G-Rubik's Cube
题目链接:https://ac.nowcoder.com/acm/contest/303/G
题目大意:没写,目测不会
思路:
H-Protoss and Zerg(规律后快速幂)
题目链接:https://ac.nowcoder.com/acm/contest/303/H
题目大意:中文题
思路:找规律发现n个兵有2^n - 1的方案数,但后两个相加,再一直乘下去,注意取模就行了
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=2e4+10;
const int INF=0x3f3f3f3f;
const ll mod=998244353;
//ll take(ll a,ll b)
//{
// ll res=0;
// while(b)
// {
// //cout<<b<<endl;
// //cout<<res<<endl;
// if(b&1)
// res=(res+a)%mod;
// a=(a+a)%mod;
// b=b>>1;
// }
// return res;
//}
ll quick(ll a,ll n)
{
//cout<<a<<" "<<n<<endl;
ll res=1;
while(n)
{
// cout<<n<<endl;
// cout<<res<<endl;
if(n&1)
res=(res*a)%mod;
a=(a*a)%mod;
// res=take(res,a)%mod;
// a=take(a,a)%mod;
n=n>>1;
}
//cout<<res<<endl;
return res;
}
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
int n;
cin>>n;
ll ans=1;
while(n--)
{
ll a,b;
cin>>a>>b;
ll ans1=quick(2,a)-1;
ll ans2=quick(2,b)-1;
ll res=(ans1+ans2)%mod;
//cout<<res<<" "<<ans1<<" "<<ans2<<endl;
ans=(ans*res)%mod;
//ans=take(ans,res)%mod;
}
cout<<ans<<endl;
}
}
}
I-Race Sorting(模拟)
题目链接:https://ac.nowcoder.com/acm/contest/303/I
题目大意:中文题
思路:输入,然后遍历三遍,每次输出对应的种类的id
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=2e4+10;
const int INF=0x3f3f3f3f;
const ll mod=998244353;
struct node{
int id;
char kind[100];
}arr[1010];
int ans[1010];
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
clean(ans,0);
int n;
cin>>n;
int id;
char s[100]={'\0'},sot[3][100]={'\0'};
for(int i=1;i<=n;++i)
cin>>arr[i].id>>s>>arr[i].kind;
cin>>s;
int l=strlen(s),k=0,str=0;
for(int i=0;i<=l;++i)
{
if(s[i]==','||i==l)
{
for(int j=str;j<i;++j)
sot[k][j-str]=s[j];
str=i+1;
++k;
}
}
// cout<<s<<endl;
// for(int i=0;i<3;++i)
// cout<<strlen(sot[i])<<" "<<sot[i]<<" "<<sot[i][0]<<endl;
//
k=0;
for(int i=0;i<3;++i)
{
for(int j=1;j<=n;++j)
{
if(strcmp(arr[j].kind,sot[i])==0)
ans[k++]=arr[j].id;
}
}
cout<<ans[0];
for(int i=1;i<k;++i)
cout<<" "<<ans[i];
cout<<endl;
}
}
}
J-Carrier(巨水)
题目链接:https://ac.nowcoder.com/acm/contest/303/J
题目大意:判断输入的符不符合要求
思路:输入,判断,输出
AC:
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
int a,b,x,y;
//350 250 6
cin>>a>>b>>x>>y;
if(a<350)
cout<<"You have not enough minerals."<<endl;
else if(b<250)
cout<<"You require more vespene gas."<<endl;
else if(x+6>y)
cout<<"You must construct additional pylons."<<endl;
else
cout<<"Carrier has arrived."<<endl;
}
}
}
K-Technology Tree(建一棵树遍历)
题目链接:https://ac.nowcoder.com/acm/contest/303/K
题目大意:中文题
思路:输入,从基础建筑当成根节点建棵树,然后遍历一遍这棵树,当前节点的值=当前节点+父节点,然后就是输入输出了
AC:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<math.h>
//#include<map>
//#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<bitset>
#include<string>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// 水印
//std::ios::sync_with_stdio(false);
// register
const int MAXN=2e4+10;
const int INF=0x3f3f3f3f;
const ll mod=1e9+7;
struct node{
int a,b;
}arr[MAXN],ans[MAXN];
struct Edge{
int v,w,nxt;
Edge(int _v=0,int _w=0,int _nxt=0):
v(_v),w(_w),nxt(_nxt){}
}edge[MAXN<<1];
int head[MAXN],ecnt;
void intt()
{
clean(head,-1);
ecnt=0;
}
void add(int u,int v,int w)
{
edge[ecnt]=Edge(v,w,head[u]);
head[u]=ecnt++;
}
void dfs(int u)
{
//cout<<"u:"<<u<<endl;
for(int i=head[u];i+1;i=edge[i].nxt)
{
int temp=edge[i].v;
int a=ans[u].a,b=ans[u].b;
ans[temp].a=arr[temp].a+a;
ans[temp].b=arr[temp].b+b;
//cout<<"temp:"<<temp<<"ans.a .b :"<<ans[temp].a<<" "<<ans[temp].b<<endl;
dfs(temp);
}
}
int main()
{
std::ios::sync_with_stdio(false);
int T;
while(cin>>T)
{
while(T--)
{
intt();
int n,q;
cin>>n>>q;
for(int i=1;i<=n;++i)
cin>>arr[i].a>>arr[i].b;
int pre;
for(int i=2;i<=n;++i)
{
cin>>pre;
add(pre,i,1);
}
ans[1].a=arr[1].a;
ans[1].b=arr[1].b;
dfs(1);//将它向下走
while(q--)
{
int x;
cin>>x;
cout<<ans[x].a<<" "<<ans[x].b<<endl;
}
}
}
}
L-The Last Stand
题目链接:https://ac.nowcoder.com/acm/contest/303/L
题目大意:没写,
思路: