• matrix_2015_1 138


    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3844

    第一个,n个数,每次操作最大数和最小数都变成他们的差值,最后n个数相同时输出此时的值,暴力跑。

     1 #include<cstdio>
     2 int main(){
     3     int t,n,a[16];
     4     while(~scanf("%d",&t)){
     5         while(t--){
     6             scanf("%d",&n);
     7             for(int i=0;i<n;i++){
     8                 scanf("%d",&a[i]);
     9             }
    10             while(true){
    11                 int bid=0,sid=0;
    12                 for(int i=1;i<n;i++){
    13                     if(a[bid]<a[i]) bid=i;
    14                     if(a[sid]>a[i]) sid=i;
    15                 }
    16                 if(a[bid]==a[sid]){
    17                     printf("%d
    ",a[sid]);
    18                     break;
    19                 }
    20                 a[bid]=a[sid]=a[bid]-a[sid];
    21             }
    22         }
    23     }
    24     return 0;
    25 }
    View Code

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5440

    第二个,n个数,每次操作可以任意选两个数把他们变成他们gcd的值。最后问几步能都变成1,且输出每步选的数的下标。方法:先求出n个数的gcd,如果不为1,输出-1.否则一定能变成全1.变的方法是,先用第一个依次和后面的操作,直至第一个数变成1,然后再用第一个数把剩下的非1的都变掉。

     1 #include<cstdio>
     2 #include<vector>
     3 using namespace std;
     4 const int M=1e5+10;
     5 typedef pair<int,int> pii;
     6 int a[M];
     7 int gcd(int a,int b){
     8     return b?gcd(b,a%b):a;
     9 }
    10 vector<pii> ans;
    11 int main(){
    12     int n;
    13     int cas=1;
    14     while(~scanf("%d",&n)){
    15         for(int i=1;i<=n;i++){
    16             scanf("%d",&a[i]);
    17         }
    18         int now=a[1];
    19         for(int i=2;i<=n;i++){
    20             now=gcd(now,a[i]);
    21         }
    22         printf("Case %d: ",cas++);
    23         if(now>1){
    24             puts("-1");
    25             puts("");
    26             continue;
    27         }
    28         ans.clear();
    29         for(int i=2;i<=n;i++){
    30             int now=gcd(a[1],a[i]);
    31             a[1]=a[i]=now;
    32             ans.push_back(make_pair(1,i));
    33             if(now==1) break;
    34         }
    35         for(int i=2;i<=n;i++){
    36             if(a[i]==1) continue;
    37             ans.push_back(make_pair(1,i));
    38         }
    39         int len=ans.size();
    40         printf("%d
    ",len);
    41         for(int i=0;i<len;i++){
    42             printf("%d %d
    ",ans[i].first,ans[i].second);
    43         }
    44         puts("");
    45     }
    46     return 0;
    47 }
    View Code

     http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5435

    第三个,52张牌,没有大小王的,输入几张,那么剩下的就是我们可以使用的,必须全用上,问有几种排列使得字典序小于他输入的。

     1 #include<cstdio>
     2 #include<cstring>
     3 #define mt(a,b) memset(a,b,sizeof(a))
     4 const int M=64;
     5 typedef long long LL;
     6 const LL mod=1e9+7;
     7 char a[M];
     8 int num[M];
     9 int sheng[M];
    10 int getval(char c){
    11     if(c=='A') return 1;
    12     if(c=='J') return 11;
    13     if(c=='Q') return 12;
    14     if(c=='K') return 13;
    15     return c-'0';
    16 }
    17 int s[M];
    18 LL jc[M];
    19 LL INV[M];
    20 void inv_init() { //初始化%mod的乘法逆元
    21     INV[1]=1;
    22     for(int i=2; i<M; i++) {
    23         INV[i]=INV[mod%i]*(mod-mod/i)%mod;
    24     }
    25 }
    26 int main(){
    27     inv_init();
    28     jc[0]=1;
    29     for(int i=1;i<M;i++){
    30         jc[i]=jc[i-1]*i%mod;
    31     }
    32     while(~scanf("%s",a)){
    33         int la=strlen(a);
    34         mt(num,0);
    35         int val;
    36         int ls=0;
    37         for(int i=0;i<la;i++){
    38             if(a[i]=='1'){
    39                 val=10;
    40                 i++;
    41             }
    42             else{
    43                 val=getval(a[i]);
    44             }
    45             num[val]++;
    46             s[ls++]=val;
    47         }
    48         for(int i=1;i<=13;i++){
    49             sheng[i]=4-num[i];
    50         }
    51         LL ans=0;
    52         for(int i=0;i<ls;i++){
    53             for(int j=1;j<s[i];j++){
    54                 if(sheng[j]==0) continue;
    55                 LL tmp=jc[52-ls-i-1];
    56                 for(int k=1;k<=13;k++){
    57                     if(sheng[k]==0) continue;
    58                     if(k==j){
    59                         for(int u=1;u<=sheng[k]-1;u++){
    60                             tmp*=INV[u];
    61                             tmp%=mod;
    62                         }
    63                     }
    64                     else{
    65                         for(int u=1;u<=sheng[k];u++){
    66                             tmp*=INV[u];
    67                             tmp%=mod;
    68                         }
    69                     }
    70                 }
    71                 ans+=tmp;
    72                 ans%=mod;
    73             }
    74             if(sheng[s[i]]){
    75                 sheng[s[i]]--;
    76                 int sum=0;
    77                 for(int j=1;j<=13;j++){
    78                     sum+=sheng[j];
    79                 }
    80                 if(sum==0){
    81                     if(i<ls-1) ans++;
    82                     break;
    83                 }
    84                 continue;
    85             }
    86             break;
    87         }
    88         printf("%lld
    ",ans%mod);
    89     }
    90     return 0;
    91 }
    View Code

    end

  • 相关阅读:
    Leaflet_创建地图(官网示例,可以直接运行)(2017-10-20)
    三范式_数据库
    JavaScript_几种继承方式(2017-07-04)
    JavaScript_几种创建对象(2017-07-04)
    JavaScript_作用域(2017-03-16)
    JavaScript_原型和继承(2017-03-15)
    onBlur事件与onfocus事件(js)
    Bootstrap新手常见问题
    bootstrap小结
    Bootstrap 字形图标(Glyphicons)
  • 原文地址:https://www.cnblogs.com/gaolzzxin/p/4217278.html
Copyright © 2020-2023  润新知