日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPLT2017题目

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPLT2017题目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱覽室:
L1-043. 閱覽室
時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
陳越
天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號并按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號并按下E鍵,程序結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。

注意:由于線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

輸入格式:

輸入在第一行給出一個正整數N(<= 10),隨后給出N天的紀錄。每天的紀錄由若干次借閱操作組成,每次操作占一行,格式為:

書號([1, 1000]內的整數) 鍵值(“S”或“E”) 發生時間(hh:mm,其中hh是[0,23]內的整數,mm是[0, 59]內整數)

每一天的紀錄保證按時間遞增的順序給出。

輸出格式:

對每天的紀錄,在一行中輸出當天的讀者借書次數和平均閱讀時間(以分鐘為單位的精確到個位的整數時間)。

輸入樣例:
3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
輸出樣例:
2 196
0 0
1 60
題目不難 但是滿分也不容易
要是拿滿分 就需要考慮到兩個S對同一本書一起出現的時候 這個時候在來個這個書的E就會導致這個書的歸還問題 是按照前面的還是按照后面的 這里要算按照后面的才能拿滿分

#include<bits/stdc++.h> using namespace std; typedef long long ll; struct node{int sh,sm; }bok[1010]; int main() {int t,c=0,time=0;cin>>t;memset(bok,-1,sizeof(bok));while(1){int num,h,m;char o;scanf("%d %c %d:%d",&num,&o,&h,&m);if(num==0){cout<<c<<" ";if(c!=0)cout<<(int)((double)time/c+0.5)<<endl;else cout<<0<<endl;c=0,time=0;t--;memset(bok,-1,sizeof(bok));//必須初始化 一開始忘記寫了 就導致前一天借的書沒還 影響到了下一天的正常借閱 每天要把借的書清零if(t==0)break;}if(o=='S'){if(bok[num].sh==-1){bok[num].sh=h,bok[num].sm =m;}elsebok[num].sh=h,bok[num].sm = m;//兩個S同時出現取后面的}else {if(bok[num].sh!=-1){time += h*60+m-(bok[num].sh*60+bok[num].sm);bok[num].sh = -1;bok[num].sm = -1;c++;}}}return 0; }

L2-021. 點贊狂魔
時間限制
200 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
陳越
微博上有個“點贊”功能,你可以為你喜歡的博文點個贊表示支持。每篇博文都有一些刻畫其特性的標簽,而你點贊的博文的類型,也間接刻畫了你的特性。然而有這么一種人,他們會通過給自己看到的一切內容點贊來狂刷存在感,這種人就被稱為“點贊狂魔”。他們點贊的標簽非常分散,無法體現出明顯的特性。本題就要求你寫個程序,通過統計每個人點贊的不同標簽的數量,找出前3名點贊狂魔。

輸入格式:

輸入在第一行給出一個正整數N(<=100),是待統計的用戶數。隨后N行,每行列出一位用戶的點贊標簽。格式為“Name K F1 … FK”,其中 Name 是不超過8個英文小寫字母的非空用戶名,1<=K<=1000,Fi(i=1, …, K)是特性標簽的編號,我們將所有特性標簽從1到107編號。數字間以空格分隔。

輸出格式:

統計每個人點贊的不同標簽的數量,找出數量最大的前3名,在一行中順序輸出他們的用戶名,其間以1個空格分隔,且行末不得有多余空格。如果有并列,則輸出標簽出現次數平均值最小的那個,題目保證這樣的用戶沒有并列。若不足3人,則用“-”補齊缺失,例如“mike jenny -”就表示只有2人。

輸入樣例:
5
bob 11 101 102 103 104 105 106 107 108 108 107 107
peter 8 1 2 3 4 3 2 5 1
chris 12 1 2 3 4 5 6 7 8 9 1 2 3
john 10 8 7 6 5 4 3 2 1 7 5
jack 9 6 7 8 9 10 11 12 13 14
輸出樣例:
jack chris john

這道題開始把107

#include<bits/stdc++.h> using namespace std; typedef long long ll; struct node{string name;int difn,k;double avg; }p[120]; bool cmp(node a,node b){return a.difn>b.difn||(a.difn==b.difn&&a.avg<b.avg); } int main() {int n;cin>>n;set<int>s;for(int i=1;i<=n;i++){string name;cin>>p[i].name>>p[i].k;int tmp = p[i].k;s.clear();while(tmp--){int t;cin>>t;s.insert(t);}p[i].difn = s.size();p[i].avg = (double)p[i].k/p[i].difn;}sort(p+1,p+1+n,cmp);int lim = min(3,n);for(int i=1;i<=lim;i++){cout<<p[i].name;if(i!=lim)cout<<" ";}int _ = 3-lim;for(int i=1;i<=_;i++){cout<<" -";}cout<<endl;return 0; }

這道題一開始把1e7當成107做了 不過排序寫對了就沒問題了 開始沒理解什么叫做標簽的平均次數
原來就是用所有標簽數量÷不同標簽的數量。。。 其實就是不同標簽個數相同的情況下,總個數小的排在前面,這里可以省略一次浮點運算。

L1-046. 整除光棍
時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷
這里所謂的“光棍”,并不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程序要讀入一個整數x,這個整數一定是奇數并且不以5結尾。然后,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。

提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在于,s可能是個非常大的數 —— 比如,程序輸入31,那么就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。

輸入格式:

輸入在一行中給出一個不以5結尾的正奇數x(< 1000)。

輸出格式:

在一行中輸出相應的最小的s和n,其間以1個空格分隔。

輸入樣例:
31
輸出樣例:
3584229390681 15

import java.math.BigInteger; import java.util.Scanner;public class Main {public static void main(String[] args) {int x;Scanner sc = new Scanner(System.in);x = sc.nextInt();int tmp = x,cnt=0;String a = "";while(tmp!=0) {tmp/=10;a+="1";}BigInteger fac = new BigInteger(x+"");BigInteger ten = new BigInteger("10");BigInteger ans = new BigInteger(a);ans.pow(cnt);if(ans.compareTo(fac)<0) {ans = ans.multiply(new BigInteger("10")).add(new BigInteger("1"));}while(!(ans.mod(fac).equals(BigInteger.ZERO))) {ans = ans.multiply(ten).add(BigInteger.ONE);}System.out.println(ans.divide(fac)+" "+ans.toString().length());} }

當然也可以模擬除法 一開始想到模擬除法會用到高精度
但是仔細想一想輸入數據不過萬 那么我們在做除法的過程中 總是在用比這個數多一位的數在除 所以除數不會太大 也就沒必要用高精度 因為這個數總是在用余數做除法

#include<bits/stdc++.h> using namespace std; char ans[10010]; int main(){int p=0,len=0,n=1,a;cin>>a;while(++len){if(p||n/a){//not first digit or n mod a ==0 ans[p++] = '0'+n/a; } // cout<<len; n=n%a;if(n==0){ans[p]='\0';printf("%s %d\n",ans,len);break;}n = n*10+1;}return 0; }
  • Read Number in Chinese (25)
    時間限制
    400 ms
    內存限制
    65536 kB
    代碼長度限制
    16000 B
    判題程序
    Standard
    作者
    CHEN, Yue
    Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output “Fu” first if it is negative. For example, -123456789 is read as “Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu”. Note: zero (“ling”) must be handled correctly according to the Chinese tradition. For example, 100800 is “yi Shi Wan ling ba Bai”.
    Input Specification:
    Each input file contains one test case, which gives an integer with no more than 9 digits.
    Output Specification:
    For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
    Sample Input 1:
    -123456789
    Sample Output 1:
    Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
    Sample Input 2:
    100800
    Sample Output 2:
    yi Shi Wan ling ba Bai
  • #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; string m[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; string unit[] = {"Shi","Bai","Qian","Wan"};// int main() {//1 2345 6789string a,ans;getline(cin,a);int tag=0,c0=0;bool f=0;if(a=="0")cout<<"ling"<<endl;else{if(a[0]=='-')ans+="Fu",tag++;for(;tag<a.length();tag++){int tmp = a[tag]-'0';int dig = a.length()-tag;if(tmp!=0){ if(tag!=0)ans+=" ";if(c0!=0){ans+=m[0],c0=0;ans+=" ",ans+=m[tmp];}else ans+=m[tmp];//unit if(dig==9)ans+=" ",ans+="Yi",f=1;else if(dig==1)continue;else if(dig!=5)ans+=" ",ans+=unit[(dig-2+4)%4];}else {c0++;}if(dig==5){if(c0!=4)ans+=" ",ans+="Wan";//有萬則加 無萬不加 }}cout<<ans<<endl;} return 0; }

    注意測試點中有0的情況
    中文的邏輯是每四位相同單位 第一個5位多加個萬 如果前面不都是0 第二個5位多加個億

    總結

    以上是生活随笔為你收集整理的GPLT2017题目的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。