A.相反数
题目链接:http://118.190.20.162/view.page?gpid=T10
水题,但是我第一次提交竟然是0分惊了,这要是考试现场不就gg了吗,简单题还是要细心!
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
int main(){
int N;
scanf("%d",&N);
set<int> st;
int count=0;
for(int i=0;i<N;i++){
int tmp;
scanf("%d",&tmp);
st.insert(tmp);
if(st.find(-tmp)!=st.end()){
count++;
}
}
printf("%d",count);
return 0;
}
B.窗口
题目链接:http://118.190.20.162/view.page?gpid=T9
一道小模拟题,用一个二维数组来表示屏幕状态就好了,然后按着要求进行模拟覆盖,但是不知道为什么我的程序一直是90分,不知道哪里有个小错误,找不到懒得找了。。。
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int MAXV=20;
int N,M;
struct Window{
int x1;
int y1;
int x2;
int y2;
};
Window aw[MAXV];
int number[MAXV];
int pm[2700][1500];
void fg(){
memset(pm,0,sizeof(pm));
for(int i=1;i<=N;i++){
for(int j=aw[i].x1;j<=aw[i].x2;j++){
for(int k=aw[i].y1;k<=aw[i].y2;k++){
pm[j][k]=number[i];
}
}
}
}
int main(){
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
aw[i].x1=a;aw[i].y1=b;
aw[i].x2=c;aw[i].y2=d;
number[i]=i;
}
fg();
while(M--){
int x,y;
scanf("%d%d",&x,&y);
if(pm[x][y]){
int num=pm[x][y];
printf("%d\n",num);
swap(aw[num],aw[N]);
swap(number[num],number[N]);
fg();
}else{
printf("IGNORED\n");
}
}
return 0;
}
C.命令行选项
题目链接:http://118.190.20.162/view.page?gpid=T8
这个题简直了,看半天才看懂~.~真不知道考场上遇到这样的题会不会心态爆炸,看懂题后其实不是很难做,就是一个字符串的处理工作。
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int WC=0;
const int YC=1;
map<char,int> mp;
vector<string> vs;
map<string,string> cs;
void split(string s,char c){
int start=0;
for(int i=0;i<s.length();i++){
if(s[i]==c){
vs.push_back(s.substr(start,i-start));
start=i+1;
}
}
if(start<s.length()){
vs.push_back(s.substr(start,s.length()-start));
}
}
set<string> getRel(){
set<string> srel;
for(int i=1;i<vs.size();i++){
if(vs[i].length()==2 && vs[i][0]=='-' && mp.find(vs[i][1])!=mp.end()){
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
if(vs[i][1]==it->first){
if(it->second==WC){
srel.insert(vs[i]);
}else if(it->second==YC && i+1<vs.size()){
srel.insert(vs[i]);
cs[vs[i]]=vs[i+1];
i++;
}
break;
}
}
}else{
break;
}
}
return srel;
}
int main(){
char buf[100];
scanf("%s",buf);
string s(buf);
for(int i=0;i<s.length();i++){
if(i+1<s.length() && s[i+1]==':'){
mp[s[i]]=YC;
i++;
}else{
mp[s[i]]=WC;
}
}
int N;
scanf("%d",&N);
getchar();
for(int i=1;i<=N;i++){
vs.clear();
cs.clear();
gets(buf);
string str(buf);
split(str,' ');
set<string> srel=getRel();
printf("Case %d:",i);
for(set<string>::iterator it=srel.begin();it!=srel.end();it++){
string ts=*it;
printf(" %s",ts.c_str());
if(mp[ts[1]]==YC){
printf(" %s",cs[ts].c_str());
}
}
printf("\n");
}
return 0;
}
D. 无线网络
题目链接:http://118.190.20.162/view.page?gpid=T7
一道BFS试题,很少做BFS题目,但是发现第四道基本都是这样,一定要多做多练习这样的题目。
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int MAXV=210;
typedef long long ll;
ll n,m,k,r;
struct Node{
ll x,y;
}noset[MAXV];
struct status{
ll x,y;
int step,kcount;
};
bool visited[MAXV];
int bfs(){
queue<status> q;
memset(visited,false,sizeof(visited));
status start,end;
start.x=noset[0].x;end.x=noset[1].x;
start.y=noset[0].y;end.y=noset[1].y;
start.step=0;
start.kcount=0;
q.push(start);
visited[0]=true;
int max;
while(!q.empty()){
status tpn=q.front();
q.pop();
if(tpn.x==end.x && tpn.y==end.y){
return tpn.step-1;
}
if(tpn.kcount==k){
max=n;
}else{
max=n+m;
}
for(int i=0;i<max;i++){
if(visited[i]) continue;
if((noset[i].x-tpn.x)*(noset[i].x-tpn.x)+(noset[i].y-tpn.y)*(noset[i].y-tpn.y)<=r*r){
visited[i]=true;
status st;
st.x=noset[i].x;
st.y=noset[i].y;
if(i>=n){
st.kcount=tpn.kcount+1;
}else{
st.kcount=tpn.kcount;
}
st.step=tpn.step+1;
q.push(st);
}
}
}
return 0;
}
int main(){
scanf("%d%d%d%d",&n,&m,&k,&r);
for(int i=0;i<n+m;i++){
ll x,y;
scanf("%lld%lld",&x,&y);
noset[i].x=x;
noset[i].y=y;
}
printf("%d",bfs());
return 0;
}
E.任务调度
题目链接:http://118.190.20.162/view.page?gpid=T6
不会!!!先放这,刷完剩下的回来补。