Summer training #6
A:水.看0多还是1多就行
B:模拟二进制运算 ,,卡了好久 不应该
#include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define foror(i,a,b) for(i=a;i<b;i++) #define foror2(i,a,b) for(i=a;i>b;i--) #define EPS 1.0e-8 #define PI acos(-1.0) #define INF 3000000000 #define MOD 1000000009 #define mem(a,b) memset((a),b,sizeof(a)) #define TS printf("!!!\n") #define lson o<<1, l, m #define rson o<<1|1, m+1, r //using ll = long long; //using ull= unsigned long long; //std::ios::sync_with_stdio(false); using namespace std; //priority_queue<int,vector<int>,greater<int>> que; typedef long long ll; string a,b,c; int num[4][110]; int will[4][110]; int alen; int blen; int clen; void print() { for(int i=10;i>=0;i--) cout<<num[1][i]; cout<<endl; for(int i=10;i>=0;i--) cout<<num[2][i]; cout<<endl; for(int i=10;i>=0;i--) cout<<num[3][i]; cout<<endl; } void init() { for(int i=1;i<=alen;i++) num[1][i]=a[alen-i]-'0'; for(int i=1;i<=blen;i++) num[2][i]=b[blen-i]-'0'; for(int i=1;i<=clen;i++) num[3][i]=c[clen-i]-'0'; } int doit(int a,int b,int c) { int ans1; int ans2=0; int flag=1; for(int i=1;i<=101;i++) { ans1=num[a][i]+num[b][i]+ans2; ans2=ans1/10; ans1%=10; if(ans1!=num[c][i]) { flag=0; break; } } return flag; } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> a >> b >> c; alen=a.size(); blen=b.size(); clen=c.size(); for(int i=1;i<=3;i++) mem(num[i],0); init(); //print(); int flag=0; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int w=1;w<=3;w++) { //cout<<i<<j<<w<<":"; //cout<<doit(i,j,w)<<endl; if(doit(i,j,w)==1) { flag=1; } } if(flag==1) cout<<"YES"; else cout<<"NO"; return 0; }
E:按照要求模拟 计算不符合题中要求的个数
#include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define foror(i,a,b) for(i=a;i<b;i++) #define foror2(i,a,b) for(i=a;i>b;i--) #define EPS 1.0e-8 #define PI acos(-1.0) #define INF 3000000000 #define MOD 1000000009 #define mem(a,b) memset((a),b,sizeof(a)) #define TS printf("!!!\n") #define lson o<<1, l, m #define rson o<<1|1, m+1, r //using ll = long long; //using ull= unsigned long long; //std::ios::sync_with_stdio(false); using namespace std; //priority_queue<int,vector<int>,greater<int>> que; typedef long long ll; int table[10][10]; int num[10005][10];// int ans[6]; void doit(int x) { for(int i=1;i<=5;i++) ans[i]=num[x][i]; } int check1(int x) { for(int i=1;i<=5;i++) for(int j=0;j<=9;j++) { doit(x); if(ans[i]==j) continue; ans[i]=j; table[table[table[ans[1]][ans[2]]][ans[3]]][ans[4]] if(anser==0) return 1; } return 0; } int check2(int x) { for(int i=1;i<=4;i++) { doit(x); if(ans[i]==ans[i+1]) continue; swap(ans[i],ans[i+1]); table[table[table[ans[1]][ans[2]]][ans[3]]][ans[4]] if(anser==0) return 1; } return 0; } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); for(int i=0;i<10;i++) for(int j=0;j<10;j++) cin>>table[i][j]; for(int i=0;i<10000;i++) { int now=i; for(int j=4;j>0;j--) { num[i][j]=now%10; now/=10; } for(int j=1;j<=4;j++) ans[j]=num[i][j]; for(int j=1;j<=4;j++) { ans[j]=table[ans[j-1]][ans[j]]; } num[i][5]=ans[4]; } /*for(int i=1;i<=5;i++) cout<<num[2016][i]; cout<<endl; for(int j=0;j<=10;j++) { for(int i=1;i<=5;i++) cout<<num[j][i]; cout<<endl; }*/ int ans=0; for(int i=0;i<10000;i++) if(check1(i)||check2[i]) ans++; cout<<ans<<endl; return 0; }
F:有N行单向流水线和对应的N个仓库 每个机器人有两个值 X Y 其中X表示坐标 Y表示在哪一个流水线下面 要求输出每个仓库能从几个流水线流入
根据题意每个仓库我们给他两个值 一个代表最上边能到达那个仓库 一个代表最下边能到达那个仓库 因为机器人只会连接相邻的两条线 所以保证l到r之间是连续的
再按机器人的坐标进行升序排序 然后依次读入 每次更新机器能碰到的两条线的l与r (例二很有用)
#include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define foror(i,a,b) for(i=a;i<b;i++) #define foror2(i,a,b) for(i=a;i>b;i--) #define EPS 1.0e-8 #define PI acos(-1.0) #define INF 3000000000 #define MOD 1000000009 #define mem(a,b) memset((a),b,sizeof(a)) #define TS printf("!!!\n") #define lson o<<1, l, m #define rson o<<1|1, m+1, r //using ll = long long; //using ull= unsigned long long; //std::ios::sync_with_stdio(false); using namespace std; //priority_queue<int,vector<int>,greater<int>> que; typedef long long ll; pair<int,int> robot[200010]; int ans[200010][2]; bool cmp(pair<int,int> a,pair<int,int> b){return a.first<=b.first;} int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n,m; while(scanf("%d %d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) ans[i][0]=ans[i][1]=i; for(int i=1;i<=m;i++) { scanf("%d %d",&robot[i].first,&robot[i].second); } sort(robot+1,robot+1+m,cmp); for(int i=1;i<=m;i++) { int aim=robot[i].second; int ans1=min(ans[aim][0],ans[aim+1][0]); int ans2=max(ans[aim][1],ans[aim+1][1]); ans[aim][0]=ans1; ans[aim+1][0]=ans1; ans[aim][1]=ans2; ans[aim+1][1]=ans2; } for(int i=1;i<n;i++) cout<<ans[i][1]-ans[i][0]+1<<" "; cout<<ans[n][1]-ans[n][0]+1<<endl; } return 0; }