厦门大学“网宿杯“17届程序设计竞赛决赛(同步赛)
A | 这波啊,这波是..... |
先存数组然后i,j调换,即可
顺时针
for(j=n-1;j>=0;j--) { for(i=0;i<n;i++) { cout<<a[i][j]; } cout<<endl; }逆时针
for(j=0;j<n;j++) { for(i=n-1;i>=0;i--) { cout<<a[i][j]; } cout<<endl; }完整代码:
#include<iostream> using namespace std; #define maxn 1005; char a[maxn][maxn]; int main() { int n,i,j; cin>>n; for(i=0;i<n;i++) { for(j=0;j<n;j++) { cin>>a[i][j]; } } for(j=0;j<n;j++) { for(i=n-1;i>=0;i--) { cout<<a[i][j]; } cout<<endl; } }
C | 电竞希金斯 |
#include<iostream> #include<cstdio> #include<string.h> #include<string> #include<cmath> #include<algorithm> #define IO ios::sync_with_stdio(false), cin.tie(0) typedef unsigned long long ull; typedef long long ll; #pragma GCC optimize(2) using namespace std; int main() { IO; double a,b,c; cin>>a>>b>>c; a=-1*a; c=-1*c; //cout<<c/b<<endl; double s=0,m; if(b==0) { if(a==0) { cout<<"non"<<endl; } else { m=(-1)*c/a; if(m>0) { cout<<"1 4"<<endl; } else if(m<0) { cout<<"2 3"<<endl; } else { cout<<"non"<<endl; } } } else { s=a/b; m=c/b; if(s>0) { if(m>0) { cout<<"1 2 3"<<endl; } else if(m<0) { cout<<"1 3 4"<<endl; } else { cout<<"1 3"<<endl; } } else if(s<0) { if(m>0) { cout<<"1 2 4"<<endl; } else if(m<0) { cout<<"2 3 4"<<endl; } else { cout<<"2 4"<<endl; } } else { if(m>0) { cout<<"1 2"<<endl; } else if(m<0) { cout<<"3 4"<<endl; } else { cout<<"non"<<endl; } } } }
F | 这题多捞啊 |
2. 不存在一个划分将集合划分成和相等的两部分,也就是说,集合的任意子集和均不为n。
第二条是关键,分两种考虑,奇偶判断。假设输入4,那如果输出2 2 2 2,则违反第二条条件,即在第二个与第三个之间划分开来会形成和相等的两部分。因此输入偶数只能够输出一行结果;输入奇数,便可以输出两行结果。
在开始前做一个特判,如果输入1,则直接输出2.
#include<iostream> using namespace std; int main() { ll n,i; cin>>n; if(n==1) { cout<<2<<endl; } else { if(n&1) { for(i=0;i<n-1;i++) { if(i) cout<<' '; cout<<1; } cout<<' '<<n+1<<endl; for(i=0;i<n;i++) { if(i) { cout<<' '; } cout<<2; } cout<<endl; } else { for(i=0;i<n-1;i++) { if(i) { cout<<" "; } cout<<1; } cout<<' '<<n+1<<endl; } } }