T1 重要的话说三遍(签到)
题目:
代码:
#include <iostream>
int main(){
int t=3;
while(t--) std::cout<<"I'm gonna Win!"<<'\n';
return 0;
}
T2 日期格式化
题目:
#include <bits/stdc++.h>
using namespace std;
int main(){
int m,d,y;
cin>>m;
getchar();//读入时跳过 ‘-’ 符号
cin>>d;
getchar();
cin>>y;
getchar();
cout<<y<<"-";
if(m<10) cout<<"0"<<m<<"-";
else cout<<m<<"-";
if(d<10)cout<<"0"<<d;
else cout<<d;
return 0;
}
T3 大笨钟
题目:
代码:
#include <bits/stdc++.h>
using namespace std;
stack <int > z;
int main(){
int h,m;
cin>>h; getchar(); cin>>m;
if((h<12)||(h==12&&m==0)){
cout<<"Only ";
if(h<10) {
cout<<"0"<<h<<":";
} else cout<<h<<":";
if(m<10){
cout<<"0"<<m;
} else cout<<m;
cout<<". Too early to Dang.";
}
else{
h-=12;
if(m!=0) h++;
while(h--) cout<<"Dang";
}
return 0;
}
T4 拯救外星人
题目:
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long int a,b,ans=1;
cin>>a>>b;
a+=b;
for(int i=1;i<=a;i++){
ans*=i;
}
cout<<ans;
return 0;
}
T5 个位数统计
题目:
代码:
#include <bits/stdc++.h>
using namespace std;
int m[11];
int main(){
char n;
while(cin>>n){
m[n-'0']++;
}
for(int i=0;i<=9;i++){
m[i]? (cout<<i<<":"<<m[i]<<endl) : continue;
}
return 0;
}
T6 正整数
题目:
这是孬的模拟,数据读入上会造成很大的麻烦,因为L部分和R部分可能存在非数字的字符所以不能够直接读入整型变量里。为了好定位第一个空格的位置,方便判断L部分的合法性,我用了单字符逐个读入的方法,遇到空格时停止。然后再将输入数据的剩余部分全部读入到R部分中,再逐个判断。代码当然没有必要写的那么复杂,不过我也懒得改了就是; ;
#include <bits/stdc++.h>
using namespace std;
bool rno,lno;
int main(){
string a="",b="";
char temp;
while(temp=getchar()){
if(isspace(temp)){
break;
}
a = a+temp;
}
getline(cin,b);
if(a.length()>4) lno=true;
if(b.length()>4) rno=true;
int lnum=0,rnum=0;
for(int i=0;i<a.length();i++){
if(a[i]>='0'&&a[i]<='9'){
if(lnum==0&&((a[i]-'0')==0)){
lno=true;
break;
}
lnum*=10;
lnum+=a[i]-'0';
}
else{
lno=true;
break;
}
}
for(int i=0;i<b.length();i++){
if(b[i]>='0'&&b[i]<='9'){
if(rnum==0&&(b[i]-'0'==0)){
rno=true;
break;
}
rnum*=10;
rnum+=b[i]-'0';
}
else{
rno=true;
break;
}
}
if(lnum>1000||lnum<1) lno=true;
if(rnum>1000||rnum<1) rno=true;
if(lno==false) cout<<lnum;
else cout<<"?";
cout<<" + ";
if(rno==false) cout<<rnum;
else cout<<"?";
cout<<" = ";
if(lno==true||rno==true)
cout<<"?";
else cout<<lnum+rnum;
// cout<<endl<<lno<<" "<<rno;
}
T7 打印沙漏
题目:
要先算出能够打印出的层数,然后用层数变量控制符号与空格的数量(注意到第i层有 2i 个空格,2(max-i)-1 个符号),由于上下层是对称的,所以我的做法是直接打一半,另一半以字符串的形式存在栈里,很方便。
代码:
#include <iostream>
#include <stack>
using namespace std;
stack <string > a;
int n;
char f;
int main(){
cin>>n; cin>>f;
int h;
for(int i=1;i<=99999;i++){
if(i*i*2-1>n){
h = i-1;
break;
}
}
int remain = n - h*h*2 +1;
for(int i=1;i<=h;i++){
string temp="";
for(int j=1;j<i;j++) temp = " "+temp;
for(int j=1;j<=(h-i+1)*2-1;j++) temp = temp + f;
cout<<temp<<endl;
a.push(temp);
}
a.pop();
while(!a.empty()){
cout<<a.top()<<endl;
a.pop();
}
cout<<remain;
return 0;
}
T8 机工士姆斯塔迪奥
题目:
代码:
#include <iostream>
using namespace std;
long long int row[100005],line[100005],tot,n,m,q,t,eaten,stat,r,l;
void prework(){
cin>>n>>m>>q;
tot = n*m;
for(int i=1;i<=q;i++){
cin>>stat>>t;
if(stat==0&&row[t]==0)
r++ , row[t]=1;
else if(stat==1&&line[t]==0) l++, line[t]=1;
}
}
void solve(){
tot = tot + l*r - l*n - r*m;
cout<<tot;
}
int main(){
prework();
solve();
return 0;
}
L2-1
题目:
样例:
上来写了个领接矩阵,一交WA了。再读一遍题发现漏掉朋友的朋友也是朋友这个条件,敲出并查集提交过了。
#include <iostream>
using namespace std;
bool check;
int n,t,q;
int a[105][105];
int f[105];
void init(){
for(int i=1;i<=103;i++) f[i]=i;
}
int getf(int x){
if(f[x]==x) return x;
else{
f[x]=getf(f[x]);
return f[x];
}
}
void merge(int a,int b){
a=getf(a);
b=getf(b);
if(a!=b){
f[a]=b;
}
}
int main(){
init();
cin>>n>>t>>q;
for(int i=1;i<=t;i++){
int x1,x2,x3;
cin>>x1>>x2>>x3;
a[x1][x2]=x3;
a[x2][x1]=x3;
if(x3==1) merge(x1,x2);
}
for(int i=1;i<=q;i++){
check = false;
int x1,x2;
cin>>x1>>x2;
if(a[x1][x2]==1) cout<<"No problem"<<endl;
else if(a[x1][x2]==0) cout<<"OK"<<endl;
else if(a[x1][x2]==-1){
for(int i=1;i<=n;i++){
if(i==x1||i==x2) continue;
if(getf(x1)==getf(x2)){
check=true;
}
}
if(check) cout<<"OK but..."<<endl;
else cout<<"No way"<<endl;
}
}
return 0;
}
L2-2 名人堂与代金券(数据结构)
题目:
样例:
代码:
#include <bits/stdc++.h>
using namespace std;
int n,g,k,ans,cnt;
struct student{
string email;
int score;
}stu[100005];
bool cmp(student a,student b){
if(a.score>b.score)
return true;
else if(a.score==b.score){
if(a.email>b.email){
return false;
}
else return true;
}
else return false;
}
void prework(){
cin>>n>>g>>k;
for(int i=1;i<=n;i++){
cin>>stu[i].email;
int x2;
cin>>x2;
if(x2>=g) ans+=50;
else if(x2<g&&x2>=60) ans+=20;
stu[i].score=x2;
}
sort(stu+1,stu+n+1,cmp);
}
int main(){
prework();
cout<<ans<<endl;
int rank=1;
if(k>=1) cout<<rank<<' '<<stu[1].email<<' '<<stu[1].score<<endl;
cnt++;
for(int i=2;i<=n;i++){
if(stu[i].score==stu[i-1].score){
cnt++;
}
else{
cnt++;
rank = cnt;
}
if(rank<=k)
cout<<rank<<' '<<stu[i].email<<' '<<stu[i].score<<endl;
else break;
}
return 0;
}
比较函数写的混乱不堪,重写一遍应该是这个样子:
bool cmp(student a,student b){
if(a.score!=b.score)
return a.score>b.score;
else{
return a.email<b.email;
}
}